Android-NDK编译
(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编译的更多相关文章
- android NDK编译(导入).a文件和编译多个so文件(转)
源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...
- Android NDK编译之undefined reference to 'JNI_CreateJavaVM'
利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...
- 使用android ndk编译x86 so在linux下使用的问题
一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...
- [原]如何用Android NDK编译FFmpeg
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...
- Android NDK 编译FFmpeg(不需要复杂的环境变量设置)
环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd / ...
- android ndk编译项目(android-ndk-16r1)
由于采用android-ndk-16r1版本的ndk来编译 编译的环境之类在这里省略,注意是最后编译的命令如下 Administrator@WIN-AF6P80LVIJ0 ~ $ cd $ANDROI ...
- Linux环境下使用Android NDK编译c/c++生成可执行文件
1.安装Android NDK至Linux(Lubuntu 16) 从网上下载 android-ndk-r13b-linux-x86_64.zip,本人将其解压至/home/guanglun/work ...
- android ndk 编译的时候指令集的选取
android ndk在编译的时候默认生成的是thumb指令(拇指)不是arm(手臂)指令,但是有时候在看反汇编的时候,不太熟悉thumb指令或者说thumb指令看起来更费劲,需要生成arm指令,这个 ...
- 用Android NDK编译FFmpeg
附(2018-01-06): 有一个将x264及lame等库集成进去了且基于android的ffmpeg的编译方法,地址参见: https://github.com/writing ...
- android ndk 编译 libevent
1. 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/ ...
随机推荐
- Private strand flush not complete错误
Private strand flush not complete错误 (2013-10-22 11:04:58) 转载▼ 分类: FAQ 最近的一个报表系统数据库,总是出现checkpoint ...
- Leagal or Not —— 拓扑排序(王道)
Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is so h ...
- ZT:有些人,活了一辈子,其实不过是认真过了一天,其余时间都在重复这一天而已
出处:http://news.163.com/17/1011/19/D0G7UEDS0001982T.html 有些人,活了一辈子,其实不过是认真过了一天,其余时间都在重复这一天而已,也有人每天不重样 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何修改界面皮肤
切换到视图管理器,然后可以切换皮肤,会有预览效果 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: ...
- JavaScript 查看函数调用栈
1.调用栈 js中的this与函数调用栈密切相关. this实在函数调用时发生的绑定,它指向完全取决于函数在哪里被调用. 2.示例 <!DOCTYPE html> <html ...
- 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...
- 帮朋友转发招聘信息 南京知名互联网公司招聘java、测试、前端,具体私聊
一.java开发 1.5年及以上J2EE方向开发经验 2.精通spring等开源框架 3.熟悉html.javascript.css.jsp/freemarker.jquery的使用 4.熟悉使用my ...
- CentOS 7 中 Docker 的安装和卸载
安装Dokcer Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: [root@localhost ~]# yu ...
- NSTimer 增加引用计数, 导致内存泄露,
self.adTimer = [NSTimerscheduledTimerWithTimeInterval:5.0target:selfselector:@selector(handleADIma ...
- 写入文件,创建xunlei批量任务
[php] <?php $arr = array(); $arr[] = 'http://s1.dwstatic.com/group1/M00/83/4A/834a040953745f52e8a ...