編輯:Android開發實例
在Android模擬器中可以對Android手機操作系統進行適當的修改,增加各種功能,以滿足用戶的需求。那麼今天我們會為大家帶來Android JNI的相關使用方法,以方便大家對這一系統的解讀。Android的應用程序(Dalvik VM)中使用JNI(Java Native Interface)調用C/C++開發的共享庫。
1. Eclipse + Android SDK + ADT
2. JDK 1.6或1.5
3. VMWARE+Ubuntu Linux
4. Android源代碼
Ø 工程名 JNITest
Ø Package名Test.powerise.JNITest
Ø Activity名 JNItest
Ø 應用程序名 JNItest
三、 編輯res/layout/main.xml內容如下
注:Test_powerise_JNITest_JNITest.c前面有一個tab,$(JNI_H_INCLUDE)前面有一個tab
1. 打開Ubuntu虛擬機
2. 新建文件夾 路徑:~/mydroid/external/libJNITest(mydroid的為android的源碼根文件夾)
3. 把上面編寫好的頭文件、c/c++源文件、make文件拷貝進上面目錄中
4. 執行如下命令:
1 cd mydroid/external/libJNITest
2 . ../../build/envsetup.sh (注:.和../之間有一個空格)
3 mm 注:如果上面的命令不成功或沒有加最前面的點,這個命令將無效
編譯成功的後會在下面目錄中生成libJNITest.so文件
mydroid/out/target/product/generic/system/lib/
首先要把so文件拷到/system/lib目錄下
1. 啟動模擬器
2. 設置android sdk的環境變量
3. 運行cmd,執行如下命令:
adb remount
adb push libJNITest.so /system/lib
不要關閉模擬器,運行java程序JNITest,屏幕會出現“JNITest Native String”這段字符串。代碼執行成功!
代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TexTestiew
android:id="@+id/JNITest"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/jni_test" />
</LinearLayout>
四、 編輯Test.poserise.JNITest下的java文件JNITest.java
代碼
1 package Test.powerise.JNITest;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.widget.TexTestiew;
6
7 public class JNITest extends Activity {
8 static {
9 System.loadLibrary("JNITest");
10 }
11
12 public native String GetTest();
13
14 public void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContenTestiew(R.layout.main);
17 String str = GetTest();
18 TexTestiew JNITest = (TexTestiew) findViewById(R.id.JNITest);
19 JNITest.setText(str);
20 }
21 }
22
1. 設置好jdk環境變量
2. 運行cmd進入工程的根目錄下
3. 運行javah -classpath bin -d jni Test.powerise.JNITest.JNITest
4. 會在根目錄下生成一個.h的頭文件
內容如下:
代碼
1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class Test_powerise_JNITest_JNITest */
4
5 #ifndef _Included_Test_powerise_JNITest_JNITest
6 #define _Included_Test_powerise_JNITest_JNITest
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 /*
11 * Class: Test_powerise_JNITest_JNITest
12 * Method: GetTest
13 * Signature: ()Ljava/lang/String;
14 */
15 JNIEXPORT jstring JNICALL Java_Test_powerise_JNITest_JNITest_GetTest
16 (JNIEnv *, jobject);
17
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif
22
六、 編寫C/C++文件如下
代碼
#include "Test_powerise_JNITest_JNITest.h"
JNIEXPORT jstring JNICALL Java_Test_powerise_JNITest_JNITest_GetTest (JNIEnv * env, jobject obj)
{
return (*env)->NewStringUTF(env, (char *)"JNITest Native String");
}
七、 編寫Android.mk文件
代碼
1 LOCAL_PATH := $(call my-dir)
2 include $(CLEAR_VARS)
3 LOCAL_SRC_FILES:= \
4 Test_powerise_JNITest_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)
轉自:http://www.cnblogs.com/jk1001/archive/2010/07/25/1784529.html
1、JDK:Java Development Kit,java開發工具包。http://www.oracle.com/technetwork/java/javas
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
在Android的應用開發中,我們會用到各種代碼調試;其實在Android的開發之後,我們可能會碰到一些隨機的問題,如cpu過高,內存洩露等,我們無法簡單的進行代
由上篇Android Permission權限機制引子,我們知道Android 通過在每台設備上實施了基於權限的安全策略來處理安全問題,采用權限來限制安裝應用程序