以前做過eclipse下的NDK的開發,隨著google推出了android studio,現在android開發越來越遺棄eclipse,所以就想對android studio下NDK開發有所了解。
NdkDemo是一個簡單的通過native調用C返回一串字符的demo,主要是想通過這個小demo了解AS下的NDK開發(實踐中檢驗可行性)。
1.配置NDK環境、新建項目
(1). 通過Android studio在線安裝最新的NDK環境,路徑File -> Settings -> Appearance&Behavior -> System Settings -> Android SDK。選擇SDK Tools安裝最新的NDKNDK安裝
app項目
配置NDK路徑
2.編寫native方法
新建一個JniDemo類,編寫一個native方法。
public class JNIDemo {
public native static String getStringFromNative();
}
3.生成.h文件
(1).點擊view ->ToolsWindows->Terminal打開命令行,輸入 “cd app\src\main”,進入src\main\目錄下。
(2).執行如下命令
生成.h文件
javah是生成頭文件需要的工具,
-d jni 在工程下生成jni目錄,到時會在這個目錄下建JNI開始的C/C++源文件的。
-classpath E:\Android\SDK\platforms\android-23\android.jar 這個就是你SDK文件下android.jar所在的文件位置,找到后復制即可。
....\build\intermediates\classes\debug 是編譯后class路徑
com.andryyu.ndk.jni.JNIDemo是JNIDemo.class路徑
(3).刷新項目工程,會自動生成一個jni目錄,在jni目錄里面包含著一個.h頭文件。
jni目錄
4.實現C代碼
在jni目錄下,生成一個.c文件,然后編寫native方法的實現內容。(此處不贅述jni相關的語法)實現C代碼
5.設置相關配置
(1).在app module下的build.gradle配置如下信息配置庫名和體系
(2).在JniDemo.java調用so庫
public class JNIDemo {
public native static String getStringFromNative();
static {
System.loadLibrary("jniDemo"); //defaultConfig.ndk.moduleName
}
}
(3).在MainActivity中調用native方法
public class MainActivity extends AppCompatActivity {
private TextView tvInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tv_info);
String text = JNIDemo.getStringFromNative();
tvInfo.setText(text);
}
}
6.編譯
點擊Build -> Make Project編譯項目工程。然后會在build -> intermediates -> ndk -> debug目錄下,會生成相應地so庫和Android.mk編譯后
7.運行
使用genymotion虛擬機運行
運行結果
注意:
調試過程需要到 Error:(115) *** Android NDK: Aborting . Stop. 錯誤,后來借鑒關于android studio ndk Error:(115) *** Android NDK: Aborting . Stop.錯誤,將SDK由android-25改為android-26就好了。