Android Studio ndk-Jni開發詳解
Java Native Interface (JNI)標準是java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行互動。JNI 是本地程式設計介面,它使得在 Java 虛擬機器 (VM) 內部執行的 Java 程式碼能夠與用其它程式語言(如 C、C++ 和組合語言)編寫的應用程式和庫進行互動操作。
由於Android的應用層的類都是以Java寫的,這些Java類編譯為Dex型式的Bytecode之後,必須靠Dalvik虛擬機器(VM: Virtual Machine)來執行。VM在Android平臺裡,扮演很重要的角色。(多的我們不說了,介紹什麼的 到處都有可以去搜一下)
我們們先建一個NdkJniDemo的工程
新建JniUtils類實現native方法
public class JniUtils { public static native String getStringFormC(); }
然後clean project 再rebuild project 生成class檔案,這時候開啟如下圖的資料夾看是否生成了classes資料夾,沒有生成請重新來過。
再開啟Terminal輸入指令cd app/build/intermediates/classes/debug
然後再輸入指令javah -jni com.wobiancao.ndkjnidemo.ndk.JniUtils
注意 這裡javah -jni後面跟的是JniUtils類的全路徑,如果javah報不存在之類的,是你的java環境沒有配置好。
這時候開啟classes/debug下面的檔案發現多了一個檔案com_wobiancao_ndkjnidemo_ndk_JniUtils.h
然後在src/main下新建資料夾jni,把生成的.h檔案複製或者剪下到jni資料夾下面去,新建一個c類隨便取一個名字,新增程式碼如下
//// Created by XY on 16/1/4.//#include "com_wobiancao_ndkjnidemo_ndk_JniUtils.h"/* * Class: Java_com_wobiancao_ndkjnidemo_ndk_JniUtils * Method: getStringFormC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_wobiancao_ndkjnidemo_ndk_JniUtils_getStringFormC (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"這裡是來自c的string");
這裡發現標頭檔案#include <jni.h>
報紅色,是因為我們們還沒有配置ndk環境,開啟file->project structure
選擇你所下載的ndk環境路徑,如果沒有ndk這裡有個地址大家可以去下載 一個安卓工具集合的網站:http://androiddevtools.cn/
設定好了之後,發現標頭檔案還是紅色的,然後再build一下工程,就會有提示
Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set “android.useDeprecatedNdk=true” in gradle.properties to continue using the current NDK integration.
按著提示做就行了 在gradle.properties檔案末尾新增android.useDeprecatedNdk=true
就ok啦
然後在app檔案下得build.gradle ->defaultConfig括號內新增如下程式碼
ndk { moduleName "NdkJniDemo" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫,目前可有可無。}
到了這一步重新build專案,發現已經沒有變紅了。接下來就是運用了,在JniUtils類裡面新增如下程式碼
static { System.loadLibrary("NdkJniDemo");//之前在build.gradle裡面設定的so名字,必須一致}
然後簡單呼叫就行了,MainActivity程式碼如下
public class MainActivity extends AppCompatActivity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.ndk_text); textView.setText(JniUtils.getStringFormC()); } }
執行結果如圖
我們們開啟app->intermediates-ndk-debug發現生成了三個資料夾,並且對應了之前我們在build.gradle配置的abiFilters
大功告成。
新建libs資料夾把這三個資料夾放進去
然後刪除我們們的jni檔案試試,是否工程還能運用?
ok 教程完畢
最後出一個利用jni的Aes加密demo執行結果如圖所示
專案地址:https://github.com/a12a15a05/NdkJniDemo
相關文章
- Android Studio ndk-Jni開發詳細入門,Aes加密demoAndroid加密
- Android Studio 新特性詳解Android
- Android開發規範詳解Android
- ANDROID開發之SQLite詳解AndroidSQLite
- Android開發 - RecyclerView 類詳解AndroidView
- Android開發 - Movie 類詳解Android
- Android Studio Service AIDL 詳解AndroidAI
- Android Studio Gradle 常用配置詳解AndroidGradle
- Android API開發之OpenGL開發之Android OpenGL STL詳解AndroidAPI
- android studio配置ndk開發Android
- Android Studio中NDK開發Android
- Android Studio 外掛開發Android
- Android Studio匯入github專案詳解AndroidGithub
- Android APK開發:Menu介面功能詳解AndroidAPK
- Android應用開發—Intent元件詳解AndroidIntent元件
- android開發之GPS定位詳解Android
- Android Studio配置開發環境Android開發環境
- Android Studio搭建ndk開發流程Android
- 【Android Studio】Android Studio 搭建開發環境(Linux Ubuntu篇)Android開發環境LinuxUbuntu
- Android開發:ContentProvider例項詳解AndroidIDE
- Android開發中的MVP架構詳解AndroidMVP架構
- EasyPR--開發詳解(6)SVM開發詳解
- Flutter 快捷開發 Mac Android Studio 篇FlutterMacAndroid
- Android Studio NDK開發-環境配置Android
- 開發利器 - Android Studio的安裝Android
- Android Studio NDK開發:自定義庫Android
- Android Studio NDK開發:環境配置Android
- Flutter完整開發實戰詳解(十四、混合開發打包 Android 篇)FlutterAndroid
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Android Studio3.0 NDK配置與開發Android
- Mac之Android Studio開發NDK入門MacAndroid
- Android Studio開發環境搭建準備Android開發環境
- Android開發新工具Android Studio相關知識Android
- Visual Studio中的Android模擬器使用詳解Android
- Android Studio NDK開發:JNI呼叫Java函式AndroidJava函式
- Windows下搭建React Native Android開發環境詳解WindowsReact NativeAndroid開發環境
- IntelliJ IDEA/Android Studio外掛開發指南IntelliJIdeaAndroid
- Android Studio 讓開發效率事半功倍的外掛整理Android