標籤:des android style blog http io ar color os
Android開發之JNI(一)--HelloWorld及遇到的錯誤解析
1.NDK環境搭建 參考http://blog.csdn.net/xiaoliouc/article/details/8705560
2.HelloWorld編寫 (1)建立一個Android工程JniDemo,這個名字可以隨便起;
(2)建立一個HelloWorld.java類,裡面的內容如下:
public class HelloWorld { public native String print(); static { System.loadLibrary("hello-jni"); }}
(3)在MainActivity.java類中調用,如下所示:
private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.text_view); String helloWorld = new HelloWorld().print(); mTextView.setText(helloWorld); }
(4)開啟cmd,進入到工程HelloWorld.java類所在目錄,運行如下命令 javac HelloWorld.java 產生了一個HelloWorld.class的檔案 (5)用cmd返回到工程src目錄,運行以下命令 javah com.example.jnidemo.HelloWorld,這時產生一個com_example_jnidemo_HelloWorld.h檔案 也可以用命令 javah -classpath . -jni com.example.jnidemo.HelloWorld javah -classpath . com.example.jnidemo.HelloWorld 但是必需在src目錄下
(6)右擊工程名,新那一個folder,起名jni,從android ndk目錄下copy這個兩個檔案,android-ndk\samples\hello-jni\jni\Application.mkandroid-ndk\samples\hello-jni\jni\Android.mk然後把com_example_jnidemo_HelloWorld.h重新命名為HelloWorld.h這個名字可以隨意命也copy到jni目錄下
(7)編寫h檔案的實現檔案c,此處實現檔案為HelloWorld.c,內容如下: (8)開啟cygdrive,進入到項目的根目錄,運行如下命令$NDK/ndk-build, $NDK改成自己配的名字;完成後重新整理項目,目錄下多了obj檔案夾
#include <string.h>#include <jni.h>#include "HelloWorld.h"JNIEXPORT jstring JNICALL Java_com_example_jnidemo_HelloWorld_print (JNIEnv* env, jobject thiz) {return (*env)->NewStringUTF(env, "Hello World!");}
(9)Android.mk檔案配置如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := HelloWorld.cinclude $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE後面的值和ystem.loadLibrary("hello-jni");裡面的字串保持一致,表示要載入的模組庫LOCAL_SRC_FILES的值為要編譯的源檔案 編譯好後運行項目,得到了想要的結果
3.在初次編寫NDK時可能遇到的一些問題總結:1. Type ‘*****‘ could not be resolved Method ‘******‘ could not be resolved等等解決方案:左鍵->Properties->C/C++ General->Paths and Symbols->Includes->Add->添加D:\adt-bundle-windows\android-ndk\platforms\android-19\arch-arm\usr\include,NDK的路徑
2. 如果還報1的錯誤,Window->Show View->Problems,清除所有錯誤,這樣就好了。有時候弄好之後,在幾個檔案之間切換,又會報這樣的錯誤,做法繼續2.
3.Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
這是因為NDK指定的版本與minSdkVersion不一致的問題,這本身只是一個警告,但是在eclipse下就會編譯報錯,那麼如何修複呢?
只需要在你的工程的:
Application.mk
檔案中添加如下代碼即可:
[cpp] view plaincopy
- APP_PLATFORM := android-8
其中8就是指的minSdkVersion,根據自己的實際情況進行替換!
4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX這是因為我在做的時候把
[cpp] view plaincopy
- LOCAL_SRC_FILES := HelloWorld.h 改成 LOCAL_SRC_FILES := HelloWorld.c
5.obj/local/armeabi-v7a/objs/xxxxx ****multiple target patterns. Stop這是刪掉obj這個檔案夾,重建$NDK/ndk-build就OK!
如果大家在開發的過程中還遇到別的錯誤,請在留言貼出問題並附上解決方案,供其他人蔘考,謝謝!
Android開發之JNI(一)--HelloWorld及遇到的錯誤解析