Android開發之JNI(一)--HelloWorld及遇到的錯誤解析

來源:互聯網
上載者:User

標籤: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
  1. APP_PLATFORM := android-8  
當中8就是指的minSdkVersion,依據自己的實際情況進行替換!

4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX這是由於我在做的時候把 [cpp] view plaincopy
  1. 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及遇到的錯誤解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.