Android Studio JNI開發(2)------NDK 編譯原生庫

1.下載NDK開發包,或者直接從Android Studio中下載,配置NDK環境變量,環境變量配置成功後,終端中輸入ndk-build會顯示這樣的提示
   
 
2.項目是在Project模式下,在項目中創建native方法
  1. public class MainActivity extends AppCompatActivity {
  1. private View viewById;
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. viewById = findViewById(R.id.tv_show);
  7. }
  8. /**
  9. * 本地方法
  10. * @return
  11. */
  12. public native String hiNDK();
  13. }
3.創建JNI function,終端定位到java目錄下,使用javah工具生成.h的頭文件
  
 4.生成的.h頭文件在java目錄下,有時候可能不會及時出來,只要javah不報錯,稍等一下,或刷新一下就出來了,新建JNI forlder
    
 5.把.h頭文件放到jni下,新建C/C++代碼,裏面生成的JNI function直接拷貝到c/c++代碼中,添加上形式參數就可以了,剩下的就是轉成JNI中的方法了
  1. #include "com_iteast_jni_ndk_MainActivity.h"
  2. JNIEXPORT jstring JNICALL Java_com_iteast_jni_1ndk_MainActivity_hiNDK
  3. (JNIEnv *env, jobject obj){
  4. char* str = "我是一箇中國人";
  5. return (**env).NewStringUTF(env,str);
  6. }
6.在JNI中創建Android.mk文件與Application.mk文件,Application.mk是約束生成那些類型的動態庫文件(可有可無),Android.mk則約束動態庫文件名,和引用的c/c++源碼
  
  
 7.終端定位到main目錄下,或者java目錄下,生成的.so文件所在的位置不同,自己體會,一般會在main目錄生成.so
  
 8.在Android Studio中使用so文件,需要在main文件夾在創建jniLibs文件夾,把所有的so,連同其類型文件夾一同拷貝到jniLibs中,項目中使用動態庫文件之前需要調用System.loadLibrary("jni_ndk");
 9.運行項目,需要把c代碼都去掉,因爲我還沒有搞明白去如何直接通過AS通過ndk運行程序
   
源碼地址:點擊下載Demo源碼
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章