JNI開發流程

eclipse開發流程

第一種

  • 定義本地方法
    • public native String hello();
  • 工程目錄下建立jni目錄
  • 在jni目錄下建立hello.c源文件java

    #include <jni.h>//包含jni.h頭文件  定義了java和c之間數據對應關係以及java和c數據轉換的函數
      /**
       *返回值jstring
       *函數名:Java_包名(.以_代替)_類名_函數名
       *JNIEnv *env 結構體的二級指針  提供了java和c數據轉換的函數  (jni環境提供)
       *jobject obj 調用當前方法的java類(c語言調用java方法須要這個參數)jni環境提供
       */
      jstring Java_com_itheima_helloa_MainActivity_hello(JNIEnv *env,jobject obj){
          char *buf="hello";
          return (*env)->NewStringUTF(env,buf);
      }
  • 在jni目錄下建立Android.mk配置文件android

    LOCAL_PATH := $(call my-dir)
    
          include $(CLEAR_VARS)
    
          LOCAL_MODULE    := hello  #指定最終生成的庫名    lib庫名.so
          LOCAL_SRC_FILES := hello.c #指定要編譯的C語言源文件 多個源文件 空格依次排開
    
          include $(BUILD_SHARED_LIBRARY) #指定生成動態庫
  • 在jni目錄下建立Application.mk配置文件 配置生成庫的平臺eclipse

    APP_ABI := all     #指定生成庫的平臺
  • 進入到jni目錄下執行ndk-build命令生成so庫
  • 程序運行時加載so庫函數

    //程序運行時加載庫
      static{
          System.loadLibrary("hello");
      }

    添加本地支持開發方式

  • 定義本地方法
    • public native String hello();
  • 配置ndk路徑
  • 右鍵工程-android tools - add native support 指定生成的庫名
  • 會自動建立c語言源文件和Android.mk文件
  • 在jni目錄下建立Application.mk配置文件 配置生成庫的平臺gradle

    APP_ABI := all     #指定生成庫的平臺
  • 程序運行時加載so庫ui

    //程序運行時加載庫
      static{
          System.loadLibrary("hello");
      }
  • 運行程序,會自動調用ndk命令生成so庫debug

    as中開發

    as開發方式一

  • 定義本地方法
    • public native String hello();
  • 工程目錄下建立jni目錄
  • 在jni目錄下建立hello.c源文件
  • 在jni目錄下建立Android.mk配置文件指針

  • 在jni目錄下建立Application.mk配置文件 配置生成庫的平臺
  • 進入到jni目錄下執行ndk-build命令生成so庫
  • 程序運行時加載so庫code

    //程序運行時加載庫
      static{
          System.loadLibrary("hello");
      }
  • 注意:指定so庫目錄爲libs 在模塊的build.gradle下ip

    sourceSets{
              main{
                  jniLibs.srcDirs=['libs']
              }
          }

    as添加本地支持開發方式

  • 定義本地方法
    • public native String hello();
  • 配置ndk路徑
  • 右鍵工程-new - folder - jni folder 會在main下生成jni目錄
  • 建立hello.c源文件
  • 在模塊下的build.gradle下配置屬性

    ndk{
              //指定生成的庫名
              moduleName "hello"
              //指定生成的平臺
              abiFilters "armeabi","armeabi-v7a","x86"
          }
  • 在工程下的gradle.properties下配置使用廢棄的ndk

    android.useDeprecatedNdk=true
  • 在程序運行時加載so庫
    //程序運行時加載庫
    static{
    System.loadLibrary("hello");
    }
  • 運行程序,會自動調用ndk命令生成so庫
  • so庫在build - 中間文件 - ndk - debug - lib

相關文章
相關標籤/搜索