NDK的环境配置与工程创建

最近在学NDK为以后的可能需要用到的项目做准备。在环境配置遇到的问题总结。在选择网络安装时,都是选择Direct Connection,故而在Choice A Download Site里的可选地址列表为空。纠结了好久,或是自己手动填写地址也是下载不了安装包。之后在一开始选择“USE IE5 Setting”就可以看到地址可选的列表,好高兴了。且选择了地址:http://www.cypwin.cn网址就开始下载数据包了,之后安装安装了好久。OK了。

哈,事实是,我安装了好久的cygwin,但是同事告诉我现在android的eclipse支持window下的环境了,故不需要cygwin了。

工程创建:建立了一个android工程后,右击选择Android Tools -> Add Native Support..确定了即可。

在cmd命令下进入android工程的src目录,(cmd下,如C盘跳入D盘,需要输入:d:和回车即可)输入如下命令:

javah -jni com.zyp.hello.LowerToUpper(com.zyp.hello是包名,LowerToUpper为文件名)

用来生成LowerToUpper.h文件,LowerToUpper.h主要是用来编辑LowerToUpper.c文件,主要是利用LowerToUpper.h文件生成的JNIEXPORT void JNICALL Java_com_zyp_hello_LowerToUpper_convert (JNIEnv *, jobject, jstring, jstring);copy到LowerToUpper.c里的convert函数定义里。

java文件里有:

new LowerToUpper().convert("/sdcard/abc.txt", "/sdcard/result.txt");

用到native的函数。

而LowerToUpper.java的内容是:

package com.zyp.hello;
public class LowerToUpper
{
public native void convert(String filename1, String filename2);
static
{
System.loadLibrary("NDK");
}
}

LowerToUpper.c是实现你要的功能的C/C++语言文件。

遇到的问题(1):在API是1.5除外的API会工程会出现一个红色的叉叉,又找不到错误,后期发现在时出现错误:Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 .....

百度:

1)修改project.properties
看下这个地方:
# Project target.
target=android-9
如果太低了就改高一点,比如 target=android-16

还有一种比较治本的方法是:
2)修改android-ndk-r8c/build/core/add-application.mk
但是这样一来, warning 也就没有了 可能会有隐患。 实在不行再考虑这种方法

1)工程本身就是 target=android-16,不需要改变。2)最好不用。
最终解决方法:修改 "D:\workspace\hellojni\res\AndroidManifest.xml" 中的
    <uses-sdk 
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
将 8 改为 14
就可以了。

问题(2):在.c文件出现错误:

Type 'FILE' could not be resolved

解决:参考:

http://hi.baidu.com/panqijun2006/item/d29e20c53959261251505819。

问题(3):出现logcat的提示信息如下:

07-09 09:25:28.716: A/libc(13962): Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 13962 (com.demo.jni)

07-09 09:25:30.445: E/Trace(13976): error opening trace file: No such file or directory (2)

07-09 09:25:30.695: D/dalvikvm(13976): Trying to load lib /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40ce5fb0

07-09 09:25:30.706: D/dalvikvm(13976): Added shared lib /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40ce5fb0

07-09 09:25:38.346: D/dalvikvm(14029): No JNI_OnLoad found in /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40cdfe30, skipping init

是在测试实现把文件的小写字母转换为大写,且出现如上问题,并且实践结果没出来。故一直百度“error opening trace file: No such file or directory (2)”或是“No JNI_OnLoad found in /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40cdfe30, skipping init”的问题,都的不得答案。之后感觉是文件的读写权限问题,就在xml文件加上

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

就出现实践要的大写转小写结果。但是还是出现以下logcat调试信息:

07-09 09:15:50.145: E/Trace(13637): error opening trace file: No such file or directory (2)

07-09 09:15:51.065: D/dalvikvm(13637): Trying to load lib /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40ce7d78

07-09 09:15:51.065: D/dalvikvm(13637): Added shared lib /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40ce7d78

07-09 09:15:51.065: D/dalvikvm(13637): No JNI_OnLoad found in /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40ce7d78, skipping init

07-09 09:15:51.306: D/gralloc_goldfish(13637): Emulator without GPU emulation detected.

故error opening trace file: No such file or directory (2)”或是“No JNI_OnLoad found in /data/app-lib/com.demo.jni-2/libZypzypT.so 0x40cdfe30, skipping init”的信息不是个问题,可以忽略。(可惜我调试了好久!哇)


Cygwin的使用:

1.先:

Administrator@GRQ5HJMX1RYV8IR ~
$ cd $NDKROOT
2.就可以进入自己的工程目录JavaWork/HelloJni
Administrator@GRQ5HJMX1RYV8IR /cygdrive/d/android-ndk-r8e
$ cd ../JavaWork/HelloJni
3.开始编译
Administrator@GRQ5HJMX1RYV8IR /cygdrive/d/JavaWork/HelloJni
$ $NDKROOT/ndk-build。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章