標籤:
AndroidStudio環境下ndk開發的基本步驟是,寫本地方法產生標頭檔,用c/c++實現本地方法,配置android.mk檔案產生so檔案。具體步驟如下
1.建立android工程:MyJni。
2.寫本地方法,並編譯成class檔案,在\app\build\intermediates\classes\debug中找。
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("JniTest"); } public native String getStringFromNative(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtView = (TextView) findViewById(R.id.txt); txtView.setText(getStringFromNative()); }}
3.用命令列編譯成標頭檔:
javah -d jni -classpath D:\devolp\SDK\SDK\platforms\android-23\android.jar;D:\devolp\SDK\SDK\extras\android\support\v4\android-support-v4.jar;D:\devolp\SDK\SDK\extras\android\sup
port\v7\appcompat\libs\android-support-v7-appcompat.jar;E:\AndroidDev\Utils\MyJni\app\build\intermediates\classes\debug com.vko.myjni.MainActivity
在編譯標頭檔時,可以選擇javah -d app/src/jni 這樣就可以省略第7步了
4.在jni檔案夾中建c/c++檔案,並寫入代碼
#include <jni.h>/* Header for class com_vko_myjni_MainActivity */#ifndef _Included_com_vko_myjni_MainActivity#define _Included_com_vko_myjni_MainActivity#ifdef __cplusplus //以標準C形式輸出extern "C" {#endifJNIEXPORT jstring JNICALL Java_com_vko_myjni_MainActivity_getStringFromNative (JNIEnv * env, jobject){ return (*env)->NewStringUTF(env,"Hello From JNI!"); }#ifdef __cplusplus}#endif
5.在jni檔案夾中建立並配置android.mk檔案
mk檔案具體的可以參考android-ndk-r9\docs下的文檔
#必須以LOCAL_PATH變數開頭LOCAL_PATH := $(call my-dir)#清除變數include $(CLEAR_VARS)LOCAL_MODULE := JniTestLOCAL_SRC_FILES := main.cLOCAL_DEFAULT_CPP_EXTENSION := cpp#include $(BUILD_EXECUTABLE)#編譯產生動態共用程式庫include $(BUILD_SHARED_LIBRARY)
6.編譯c/c++檔案成為so檔案。用命令列:ndk-build
可以看到
7.在app目錄中build.gradle檔案中加入
sourceSets { main { jniLibs.srcDirs = [‘libs‘] }}
組成如下:
apply plugin: ‘com.android.application‘android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.vko.myjni" minSdkVersion 10 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ } } sourceSets { main { jniLibs.srcDirs = [‘libs‘] } }}dependencies { compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]) compile ‘com.android.support:appcompat-v7:23.0.1‘}
7.將libs中的檔案包括檔案夾全部拷入到app目錄中的libs檔案夾中
刪掉項目目錄下libs、jni、obj目錄不影響程式運行
8.運行android程式
AndroidStudio環境下ndk開發