(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. Python 自用代码(拆分txt文件)

    现有一个28G的txt文件,里面每一行是一个分词过的专利全文文档,一共370多万行.我需要把它按每五万行为单位做成一个json文件,格式大致如下: [{"id":"100 ...

  2. 倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 CS说明

    虚拟仿真上,要注意仿真只是为了可视化,可以看到数据的变动是否和实际一致,所以Robot2D才是主要因素,虚拟仿真采集机器人的关节位置或者TCP位置来显示而已,为了测试一些别的算法,我们还可以在虚拟仿真 ...

  3. Windows右击无新建文本文档怎么办

    右击无新建文本文档2008-07-26 16:51 刚在网上找的,在运行项输入notepad,把下面的复制进去,然后保存为123.reg,双击导入. REGEDIT4 [HKEY_CLASSES_RO ...

  4. SpringMVC+Maven开发项目源码详细介绍

    代码地址如下:http://www.demodashi.com/demo/11638.html Spring MVC概述 Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的W ...

  5. oracle获取时间毫秒数

    select (sysdate-to_date('1970-01-01','yyyy-mm-dd')-8/24)*24*60*60*1000-1* 60 * 60 * 1000  millisecon ...

  6. CEF与JavaScript交互读取电脑信息

    CefSharp中c#和JavaScript交互读取电脑信息 介绍 CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目.与主要关注 ...

  7. vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂

    上一篇咱们做好了准备工作.数据库设计和Entity层,如今介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其有用起来非常easy.你就觉得他就是决 ...

  8. Android BlueDroid(三):BlueDroid蓝牙开启过程enable

    关键词:bluedroid  enableNative BTIF_TASK  BTU_TASK bt_hc_work_thread set_power  preload GKI作者:xubin3417 ...

  9. cassandra的primary key, partition key, cluster key,

    https://stackoverflow.com/questions/24949676/difference-between-partition-key-composite-key-and-clus ...

  10. JMX简单样例

    一:创建maven项目,在pom.xml里面增加例如以下依赖 <dependency> <groupId>com.sun.jdmk</groupId> <ar ...