編輯:關於Android編程
1. 新建project MyJNI,使用默認設置即可。
2. 新建Test類:右鍵com.example.myjni新建java類
3. 在Test類中編寫如下代碼,loadLibrary(“test”)中“test”庫為NDK庫名,之後將會定義。myFun()即為我們自定義的c++函數。
public class Test {
static {
System.loadLibrary("test");
}
native String myFun();
}
4. 生成Test類所對應的頭文件:打開AS Terminal,切換到$工作目錄$\MyJNI\app\src\main\java目錄下,鍵入命令:javah -jni -cp ;, com.example.myjni.Test生成頭文件(注意-cp之後是 空格+分號+逗號),經過嘗試直接使用“javah -jni com.example.myjni.Test”命令會出現“ Could not find class file for ‘com.example.myjni.Test’.”的錯誤。此時在java\目錄下就可以看到生成的.h文件了。
生成的.h內容如下:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
5. 新建jni文件夾:在main目錄上右鍵,new->folder->jni floder
6. 將步驟4中生成的頭文件剪切到jni文件夾中,並且新建C++ source file “test.cpp”,編輯代碼如下:
#include "com_example_myjni_Test.h"
JNIEXPORT jstring Java_com_example_myjni_Test_myFun(JNIEnv *env, jobject obj) {
return env->NewStringUTF("hello, this is myFun output!");
}
jstring Java_com_example_myjni_Test_myFun(JNIEnv *env, jobject obj);
在編輯完頭文件之後,可以build一下,這樣便會提示相關變量類型及函數。至此代碼部分就搞定了~
7. 配置AS NDK環境:打開AS SDK manager在sdk tools中選擇Android NDK點擊安裝。
8.左鍵file,選擇project structure。進入sdk location,看到如下界面,選擇OK。此時NDK及SDK的目錄將會出現在local.properties中。
local.properties中代碼如下所示:
ndk.dir=D\:\\Users\\XXX\\AppData\\Local\\Android\\sdk\\ndk-bundle
sdk.dir=D\:\\Users\\XXX\\AppData\\Local\\Android\\sdk
9.向gradle.properties中加入android.useDeprecatedNdk=true
10.向app目錄下build.gradle文件中設置庫文件名(生成的so文件名),其moduleName “test”就是第3步中System.loadLibrary(“test”);中所填的庫名。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.myjni"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
//添加部分
ndk{
moduleName "test"
}
//添加部分結束
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
11.至此我們第一個jni程序所需的所有步驟已經完成,點擊運行,查看結果。
通過《Android之——AIDL小結》與《Android之——AIDL深入》兩篇博文,相信大家已經對Andr
學習到的知識整個事件流向應該是從Activity—->ViewGroup—>View 從上往下調用dispatchTouchEvent
與其他圖片加載庫相同,Glide除了可以加載網絡圖片之外,也可以加載本地圖片。甚至還可以從各種各樣奇葩的數據源中加載圖片。加載網絡圖片很多情況下,我們使用圖片加載庫就是為
Android提供的系統服務之--AudioManager(音頻管理器)