標籤:net family system post height 開啟 編譯 files world
Android開發之JNI(一)--HelloWorld及遇到的錯誤解析
1.NDK環境搭建 參考http://blog.csdn.net/xiaoliouc/article/details/8705560
2.HelloWorld編寫 (1)建立一個AndroidprojectJniDemo,這個名字能夠隨便起;
(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,進入到projectHelloWorld.java類所在檔案夾。執行例如以下命令 javac HelloWorld.java 產生了一個HelloWorld.class的檔案 (5)用cmd返回到projectsrc檔案夾。執行下面命令 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)右擊project名。新那一個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下就會編譯報錯,那麼怎樣修複呢?
僅僅須要在你的project的:
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及遇到的錯誤解析