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。

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