1. 程式人生 > >AS之NDK開發流程

AS之NDK開發流程

1. 安裝配置NDK
	1). 解壓NDK的zip包到非中文目錄
	2). 配置path : 解壓後NDK的根目錄----->ndk-build

2. 給AS配置關聯NDK
	1). local.properties中新增配置
     ndk.dir=D\:\\android-ndk32-r10-windows-x86_64\\android-ndk-r10
	2). gradle.properties中新增配置
		android.useDeprecatedNdk=true

3. 編寫native方法:
	public class JNIS {
    	public native String helloJNI();
	}

4. 定義對應的JNI
	1). 在main下建立jni資料夾
	2). 生成native方法對應的JNI函式宣告標頭檔案: 命令視窗中, 進入java資料夾
			執行命令: javah com.atguigu.jnitests2.JNIS
			生成標頭檔案: com_atguigu_jnitests2_JNIS.h
			函式宣告: JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI(JNIEnv *, jobject);
	3). 將生成的標頭檔案轉移到jni資料夾下
	4). 在jni下定義對應的函式檔案: test.c
		#include "com_atguigu_jnitests2_JNIS.h"
		JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI
  		(JNIEnv * env, jobject jobj) {
  			return (*env)->NewStringUTF(env, "Hello from C");
		}
	5). 在jni資料夾下建立一個空的C檔案: empty.c
		說明: 這是AS的bug, 必須至少2個C檔案才能通過編譯

5. 指定編譯的不同CPU
		defaultConfig {
    		ndk{
        	moduleName "HelloJni" //so檔案: lib+moduleName+.so
        	abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的型別
    		}
		}
6. 編譯生成不同平臺下的動態連結檔案
	1). 執行rebuild, 生成so檔案
	2). so檔案目錄: build\intermediates\ndk\debug\lib\.....
7. 呼叫native方法:
	1). 在native方法所在的類中載入so檔案
			static {
        	System.loadLibrary("HelloJni");
    		}
	2). 在Activity中呼叫native方法:
			String result = new JNIS().helloJNI();
        Log.e("TAG", "result="+result);