在windows下面编译使用ndk,不是一个容易的事情,但是在ndk-r8后,似乎方便了很多。具体方法如下:
1. 下载安装android ndk,解压到一个目录,***是比较简单的英文路径,防止各种坑。然后将ndk加入到路径中。比如
set path=%paht%;H:\gp\Android\android-ndk-r9
set path=%path%;H:\gp\Android\android-studio\sdk\platform-tools
这两句话就是把ndk-build和adb命令加入到cmd的命令环境中,方便后面的使用。如果常用,建议加入到环境变量path中
2. 编写相关代码
注意,需要在项目目录下面建立一个jni目录,在jni目录下建立文件。
target.c
- #include <stdio.h>
- int flag = 1;
- int count = 0;
- int main()
- {
- char* str = "abcdef";
- while(flag)
- {
- printf("Target is running:%d\n", count);
- count++;
- sleep(3);
- }
- return 0;
- }
Android.mk
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := target
- LOCAL_SRC_FILES := target.c
- include $(BUILD_EXECUTABLE)
代码很简单,就是一个循环打印语句。值得注意的是Android.mk,根据需要修改LOCAL_XXX的名字就可以了,如果有多个文件,添加到SRC_FILES后面就可以了
在jni目录运行命令
ndk-build
- "Compile thumb : target <= target.c
- Executable : target
- Install : target => libs/armeabi/target
会在项目目录的libs/armeabi目录下面生产目标代码
下面的操作方法是将target上传到调试机器上,我一般使用机器,因为模拟器太慢了,折磨人。你的机器需要设置为usb development,并且需要有root权限,否则,只能在模拟器中测试。
adb remount
adb push target /data/local/tmp
adb shell
su
cd /data/local/tmp
chmod 751 target
./target
- root@android:/data/local/tmp # ./target
- ./target
- Target is running:0
- Target is running:1
- Target is running:2
- Target is running:3
- Target is running:4
- Target is running:5
需要注意的地方是android下面busybox的chmod u+x target不能工作,只能用751这种数字方式来设置程序的可运行。
希望你好运,能够运行一个helloword的ndk程序