Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android JNI簡單實例

Android JNI簡單實例

編輯:初級開發

(1) Eclipse中新建android工程 工程名 JNItest Package名com.ura.test Activity名 JNItest 應用程序名 JNItest (2) 編輯main.xml   1. <?XML version="1.0" encoding="utf-8"?>
  2. <LinearLayout XMLns:android="http://schemas.android.com/apk/res/android"
  3.    android:orIEntation="vertical"
  4.    android:layout_width="fill_parent"
  5.    android:layout_height="fill_parent"
  6.    >
  7. <TextVIEw 
  8.    android:id="@+id/JNITest"
  9.    android:layout_width="fill_parent"
  10.    android:layout_height="wrap_content"
  11.    android:text="@string/JNITest"
  12.    />
  13. </LinearLayout>
14. 復制代碼
(3)編輯Java文件   1. package com.ura.test;
  2.   3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.widget.TextVIEw;
  6. public class JNITest extends Activity {
  7.   
  8.    static {
  9.            System.loadLibrary("JNITest");
  10.    }
  11.    public native String GetTest();
  12.          @Override
  13.    public void onCreate(Bundle savedInstanceState) {
  14.        super.onCreate(savedInstanceState);
  15.        setContentVIEw(R.layout.main);
  16.        String str =GetTest();
  17.        TextView JNITest = (TextView)findVIEwById(R.id.JNITest);
  18.        JNITest.setText(str);
  19.    }
  20. } 復制代碼 (4)生成head文件      編譯上面工程聲稱class文件,然後用javah工具生成c/c++頭文件。   1. Javah -classpath bin -d jni com.ura.test.JNItest 復制代碼
生成的頭文件如下   1.
  2. #include <jni.h>
  3.
  4.   5. #ifndef _Included_com_ura_test_JNITest
  6. #define _Included_com_ura_test_JNITest
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10.
  15. JNIEXPORT JString JNICALL Java_com_ura_test_JNITest_GetTest
  16.  (JNIEnv *, jobject);
  17.   18. #ifdef __cplusplus
  19. }
  20. #endif
  21. #endif 復制代碼 (5)編寫c/c++文件如下   1. #include "com_ura_test_JNITest.h"
  2.   3.
  4.
  5. #define LOG_TAG "JNITest"
  6.   7. #undef LOG
  8.   9. #include <utils/Log.h>
  10.   11.
  12.
  13.
  14.
  15. JNIEXPORT JString JNICALL Java_com_ura_test_JNITest_GetTest
  16.  (JNIEnv * env, jobject obj)
  17. {
  18.    return (*env)->NewStringUTF(env, (char *)"JNITest Native String");
  19.    LOGD("Hello LIB!\n");
  20.   21. } 復制代碼 (6)編寫android.mk文件   1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_SRC_FILES:= \
  4.    com_ura_test_JNITest.c
  5. LOCAL_C_INCLUDES := \
  6.    $(JNI_H_INCLUDE)
  7. LOCAL_SHARED_LIBRARIES := libutils
  8. LOCAL_PRELINK_MODULE := false
  9. LOCAL_MODULE := libJNITest
  10. include $(BUILD_SHARED_LIBRARY) 復制代碼 (7)編譯生成動態庫 新建文件夾
~/mydroid/external/libJNITest
把上面編寫好的頭文件,c/c++源文件,make文件拷貝進上面目錄中 * 需要注意的是把PRELINK_MOUDULE設置成false 否則需要重新做成img文件再燒入。 在ubuntu中執行   1. cd
  2. cd mydroid/build/
  3. envsetup.sh
  4. cd ~/mydroid
  5. cd external/libJNITest/
  6. mm 復制代碼 編譯成功的後會在下面目錄中生成libJNITest.so文件
~mydroid/out/target/product/generic/system/lib/
(8)在模擬器中執行程序 首先要把動態庫拷進/system/lib中。 啟動模擬器   1. adb shell
  2. adb remount
  3. adb push libJNITest.so /system/lib 復制代碼 確認拷貝成功。   1. cd /system/lib
  2. ls 復制代碼
然後不要關閉模擬器(關掉再開動態庫就沒了,因為模擬器rom是只讀) 執行Java程序JNITest 會看到屏幕上打印出
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved