(2013-12-19  21:48:21 其实一切还是先看看官网的好,乱百度浪费时间....

http://developer.android.com/tools/sdk/ndk/index.html#Installing  )

(开始..这个文章只有最后的总结算笔记,其他废话)

话说移动设备交叉编译还真是麻烦....

看cocos2d-x 环境搭建 ,基本上都是推荐安装 cygwin.

因为两年前的幼稚经验,对这个东西实在是心里畏惧,加上偶尔交叉编译点东西都是用MingW,就进行了以下尝试:

1.  给MinGW环境变量加上NDK路径

找到MinGW安装目录下的  /etc/profile

  在最后加上这么一句: 

  export PATH="/e/T_GIT/android_dep/android-ndk-r8e:$PATH"

MinGW访问驱动器用 “/” 开头,并且没有“:” 。对应的实际路径是 :E:\T_GIT\android_dep\android-ndk-r8e

在MinGW环境下输入命令进行验证:

ezhong@bj-ezhong ~
$ ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/e/T_GIT/android_dep/android-ndk-r8e/build/core/build-local.mk:130: *** Android
NDK: Aborting . Stop. ezhong@bj-ezhong ~

这样就证明MinGW的NDK环境变量配置好了.

2.   编译NDK sample :hello-jni

从 E:\T_GIT\android_dep\android-ndk-r8e\samples 下拷贝 hello-jni到任意目录

比如我的是 E:\T_GIT\eclipse\hello-jni

MinGW中进入hello-jni目录,执行ndk-build 命令:

ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
$ ls
AndroidManifest.xml default.properties jni res src tests ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
$ ndk-build
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Cygwin : Generating dependency file converter script
Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni

hello-jni目录下多了libs 、obj 两个文件夹.

libs下有生成的so文件

3  编译错误

将jni文件拷贝到一个eclipse生成的android项目下,再次调用ndk-build的时候出现如下错误

ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1
$ ndk-build
Invalid attribute name:
package
/e/T_GIT/android_dep/android-ndk-r8e/build/gmsl/__gmsl:512: *** non-numeric seco
nd argument to `wordlist' function: ''. Stop. ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1
$

  查了些资料,竟然有的这样的解决方法:

  http://blog.csdn.net/devilkin64/article/details/9144355

解决方法:
找到NDK中的这个__gmsl文件,并将其中第518行:
int_encode = $(__gmsl_tr1)$(wordlist 1, ,$(__gmsl_input_int))修改为
int_encode = $(__gmsl_tr1)$(wordlist 1,$(words ),$(__gmsl_input_int))

  不理解啊...

同样一份jni代码,放入一个工程就不行了?

http://blog.csdn.net/jiuyueguang/article/details/9465305 有提示..原来是 AndroidManifest.xml 搞怪.

去掉AndroidManifest.xml果然可以编译通过.

看到各个大神们的 dos2unix 、fromdos  等转换工具 ,windows真是伤不起啊.

最后搜到个很少办法的办法..先把 AndroidManifest.xml挪走或者改名,编译完再恢复...太高级了.

总结:

  最激动人心的时刻到了....

以上都是废话....

NDK本身有提供windows的ndk-build脚本...

只要将 安装目录 如“E:\T_GIT\android_dep\android-ndk-r8e”  设置到windows系统环境变量PATH中.

直接在CMD中,切入到目标目录,ndk-build即可....

E:\T_GIT\eclipse\andTest1>ndk-build
"Compile thumb : ejni <= ejni.c
SharedLibrary : libejni.so
Install : libejni.so => libs/armeabi/libejni.so E:\T_GIT\eclipse\andTest1>

  太容易把自己绕死...

另: javah 找不到 android.app.Activity 用

  -bootclasspath E:\T_GIT\android_dep\adt-bundle-windows-x86-20130717\sdk\platforms\android-17\android.jar 

  参数指定,貌似与直接用src下的 Java文件生成的差不多..

   

Android-NDK编译的更多相关文章

  1. android NDK编译(导入).a文件和编译多个so文件(转)

    源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...

  2. Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  3. 使用android ndk编译x86 so在linux下使用的问题

    一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...

  4. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  5. Android NDK 编译FFmpeg(不需要复杂的环境变量设置)

    环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd  / ...

  6. android ndk编译项目(android-ndk-16r1)

    由于采用android-ndk-16r1版本的ndk来编译 编译的环境之类在这里省略,注意是最后编译的命令如下 Administrator@WIN-AF6P80LVIJ0 ~ $ cd $ANDROI ...

  7. Linux环境下使用Android NDK编译c/c++生成可执行文件

    1.安装Android NDK至Linux(Lubuntu 16) 从网上下载 android-ndk-r13b-linux-x86_64.zip,本人将其解压至/home/guanglun/work ...

  8. android ndk 编译的时候指令集的选取

    android ndk在编译的时候默认生成的是thumb指令(拇指)不是arm(手臂)指令,但是有时候在看反汇编的时候,不太熟悉thumb指令或者说thumb指令看起来更费劲,需要生成arm指令,这个 ...

  9. 用Android NDK编译FFmpeg

    附(2018-01-06):     有一个将x264及lame等库集成进去了且基于android的ffmpeg的编译方法,地址参见:       https://github.com/writing ...

  10. android ndk 编译 libevent

    1. 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/ ...

随机推荐

  1. vmware已经全面支持open-vm-tools

    以后不用再为vmware vm单独安装vmware-tools了,vmware已经全面支持open-vm-tools, 今天突然发现安装vmware-tools时出现deprecated提示,原来vm ...

  2. Nginx 报错413 Request Entity Too Large 上传文件过大

    1.进入Nginx安装路径下的conf文件夹中(我的路径是:/usr/local/nginx/conf) 2.打开nginx.conf,在http大括号中第一行加语句:client_max_body_ ...

  3. centos 7 安装gcc g++

    yum install gcc gcc-c++ over. ps:如果系统报yum命令未找到,退出重新登陆试试root.

  4. 集成方法:渐进梯度回归树GBRT(迭代决策树)

    http://blog.csdn.net/pipisorry/article/details/60776803 单决策树C4.5由于功能太简单.而且非常easy出现过拟合的现象.于是引申出了很多变种决 ...

  5. ural 1057 Amount of degrees 【数位dp】

    题意:求(x--y)区间转化为 c 进制 1 的个数为 k 的数的出现次数. 分析:发现其满足区间减法,所以能够求直接求0---x 的转化为 c 进制中 1 的个数为k的数的出现次数. 首先用一个数组 ...

  6. &lt;LeetCode OJ&gt; 328. Odd Even Linked List

    328. Odd Even Linked List Total Accepted: 9271 Total Submissions: 24497 Difficulty: Easy Given a sin ...

  7. SSM&SSH项目中 springmvc 乱码问题解决

    需要在web.xml文件中配置过滤器: <!-- 过滤器 过滤乱码 --> <filter> <filter-name>characterEncodingFilte ...

  8. Scala 机器学习库

    自然语言处理 ScalaNLP-机器学习和数值计算库的套装 Breeze -Scala用的数值处理库 Chalk-自然语言处理库. FACTORIE-可部署的概率建模工具包.用Scala实现的软件库. ...

  9. Java设计模式-代理模式之动态代理(附源代码分析)

    Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...

  10. CentOS 加载/挂载光驱

    1.mkdir /mnt/cdrom 2.mount /dev/cdrom /mnt/cdrom 3.挂载      umount /dev/cdrom /mnt/cdrom