ndk开发之编译安卓c/c++程序

  • 安装ndk

从安卓官网下载,ndk,双击解压到当前文件夹。建议想装在那个文件夹便解压到那个文件夹,而且文件夹的路径中不要有空格,因为gcc编译的时候会把空格前后两个字符串作为两个文件夹来对待。

  • 使用gcc手动编译

使用gcc编译程序需要先编写makefile文件,然后通过gcc make工具进行编译,makefile文件内容如下:

 1 NDK_ROOT=C:/android-ndk-r10d
 2 TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows
 3 TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi
 4 TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.9/include-fixed
 5 PLATFORM_ROOT=$(NDK_ROOT)/platforms/android-21/arch-arm
 6 PLATFORM_INCLUDE=$(PLATFORM_ROOT)/usr/include
 7 PLATFORM_LIB=$(PLATFORM_ROOT)/usr/lib
 8 MODULE_NAME=hello
 9 RM=del
10 FLAGS=-I$(TOOLCHAINS_INCLUDE)11     -I$(PLATFORM_INCLUDE)12     -L$(PLATFORM_LIB)13     -nostdlib14     -lgcc15     -Bdynamic16     -lc
17 OBJS=$(MODULE_NAME).o18     $(PLATFORM_LIB)/crtbegin_dynamic.o19     $(PLATFORM_LIB)/crtend_android.o
20
21 all:
22     $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) -c $(MODULE_NAME).c -o $(MODULE_NAME).o
23     $(TOOLCHAINS_PREFIX)-gcc $(FLAGS) $(OBJS) -o $(MODULE_NAME)
24 clean:
25     $(RM) *.o
26 install:
27     adb push $(MODULE_NAME) /data/local/tmp
28     adb shell chmod 755 /data/local/tmp/$(MODULE_NAME)

其中gcc make工具位于..\android-ndk-r10d\prebuilt\windows\bin下,此目录需要加入到系统或临时的PATH环境变量中,然后将hello.c于makefile文件放到一个目录中,开启虚拟机,然后依次执行以下命令:

make
make install
adb shell /data/local/tmp/hello

便会看到熟悉的“hello world!!!”输出了。

makefile中的I和L要记得分清,我没注意到,结果编译的时候总是报错。

时间: 2024-10-12 19:57:54

ndk开发之编译安卓c/c++程序的相关文章

Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行h264视频编码和aac音频编码,并发送到RTMP服务器,从而实现Android摄像头直播.程序名为NdkRtmpEncoder,在这里把整个过程,和大体框架介绍一下,算是给需要的人引路. 开发思路 首先,为什么要用NDK来做,因为自己之前就已经实现过RTMP推流.RTMP播放.RTSP转码等等各种

Android ndk开发swig编译jni接口配置文件(二)

之前写过一篇Android ndk开发swig编译jni接口.看这篇看不懂,看以去看看.c++与Java有些语言结构还是有一定区别,比如c++结构体,一些函数的返回值等都是有所不同,进行swig编译要进行一些预处理,也就是配置一下就行.下面说说几种情况. 一.一般情况下string,数组,枚举类型等配置Unix.i %module Survey %include "std_string.i" %include "arrays_java.i" %include &qu

Ndk开发笔记

ndk开发: 1.编译android本地程序的二种方法.q 2.安装ndk编译工具. 3.编写android.apk程序. 4.编写jni接口.定义应用程序接口, 5.编写Java文件,生成相应的字节码文件. 6.使用javah -jni Test 命令生成该java文件对应的c的头文件. 7.使用ndk-build命令生成对应的库文件. 一:创建一个arm本地程序.直接使用arm-linux-gcc 进行编译,如果使用到库的话需要使用 -static关键字进行静态链接库文件. 1.编译andr

使用Android Studio进行ndk开发的准备

1. gradle-ex2. ndk开发包3. 项目目录结构4. lldb调试器 1. 一般来说gradle不是必需的,gradle也是可以进行ndk编译的,然而你需要在编译时使用更多(多于一个)c++编译选项时,以及让IDE可以使用lldb进行调试,或者是针对ndk开发和编译有更好的支持时,gradle-ex就是你所需要的.gradle-ex的ex不是扩展而是experimental实验非正式.它对ndk相关的配置进行了增强,同时又语法不兼容gradle,并且在ndk相关以外的配置沿着的是gr

C++开发安卓、windows下搭建Android NDK开发环境

1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个工具,我们可以把用C/C++代码编译成可以直接运行在Android平台上的本地代码,这些本地代码以动态链接库( *.so )的形式存在,也正因为这样,我们可以通过复用这些动态链接库从而复用本地代码. 那么,通过NDK这个开发工具包,那么我们是否可以将一个APK完全使用C/C++来编写呢? 答案是不可

【原创】开发第一个安卓程序(教程系列贴)

[面向人员]:立志于安卓开发的所有人员,做到真正的从零基础起步: [教程说明]:本教程在内容上保证原创.简洁.详细,在附件链接上保证可用.最新.完整: [回帖说明]:教程有不清晰的地方,请及时回帖互动,楼主会第一时间更新帖子,谨以此开源.分享.共进. 1.通过代理在线更新SDK 依次打开安卓001教程建立的开发文件夹,android/develope,找到并双击SDK Manager.exe可执行文件 稍等片刻,自动弹出Android SDK Manager Log窗口,窗口内未配置代理钱会显示

windows下用ADT进行android NDK开发的详细教程(从环境搭建、配置到编译全过程)

郑重申明:如需转载本博客,请注明出处,谢谢! 这几天在学习android NDK的开发,那么首先让我们来看看android NDK开发的本质是什么. NDK(Native Development Kit),即本地开发工具,简单地说,就是在开发android应用程序的时候,在java类中调用native函数,而native函数的接口也是在java类中定义的,但是native函数最终由本地的C/C++代码实现.简单地说,就是在java中调用C/C++函数.至于为什么要用NDK,我总结了一下,大致有以

在安卓手机上学习C语言 - 安卓手机C/C++编译环境的搭建 : 程序世界的创建

   在安卓手机上学习C语言           安卓手机C/C++编译环境的搭建 : 程序世界的创建 在电脑上运行的QQ,手机上的QQ都是程序, 这些通电就能用的神奇玩意, 如果我说它们都是程序员用一个一个英文字母,数字,奇奇怪怪的符号创造出来的,我想那些没有任何概念的朋友可能会感到惊讶. 是的, 在没有揭开程序世界的神秘面纱之前, 一切都是那么神奇. 实际上, 程序确实是用一个一个英文字母(或者说拼音字母...)来写出来的, 就和写小说一样写出来的. 但是并不是写完之后把写出来的内容保存到一

Couldn't load libPassword from loader:NDK开发中C文件编译成cpu的so类库时,找不到类库报错的原因之一

LogCat输出: 03-03 12:42:32.665: E/AndroidRuntime(32432): FATAL EXCEPTION: main03-03 12:42:32.665: E/AndroidRuntime(32432): Process: com.toro.passwordencode, PID: 3243203-03 12:42:32.665: E/AndroidRuntime(32432): java.lang.UnsatisfiedLinkError: Couldn't