Android Studio下的JNI使用全解析(一)

一:創建工程

  • 1.1 創建新的工程時勾選上Include c++ support,然後一路next
    這裏寫圖片描述
    勾選的目的是爲了寫C代碼時有代碼提示

  • 1.2 創建完畢之後修改CMake你要生成的so庫的名稱
    這裏寫圖片描述

  • 1.3 把Src/main/cpp文件夾下默認生成的c文件刪除,並把MainActivity中默認生成與JNI有關的代碼刪除,然後Build->clean Project

二:環境配置

  • 2.1 在local.properties文件中,加上本地NDK的路徑,如果本地沒有ndk,可在設置中下載
    這裏寫圖片描述
    這裏寫圖片描述

  • 2.2 在gradle.properties中添加配置android.useDeprecatedNdk=true
    這裏寫圖片描述

  • 2.3 修改gradle文件的default config領域中,添加 ndk{
    moduleName “test-lib” //so文件: lib+moduleName+.so
    abiFilters “armeabi”, “armeabi-v7a”//cpu的類型
    }
    定義so庫的名稱和CPU類型
    這裏寫圖片描述

三:代碼實現

  • 3.1創建一個類,類名爲JNI,在其中定義本地方法
    public native int[] increaseArrayEles(int[] intArray);表示將一個int數組中的每個元素都+1並返回

  • 3.2生成頭文件,在java目錄下執行 (javah 類的全路徑)命令,並把生成的頭文件移動到cpp文件夾下
    這裏寫圖片描述

這裏寫圖片描述

  • 3.3 在cpp文件夾下創建c文件,並編寫C代碼,C代碼如何編寫請查閱相關資料
    這裏寫圖片描述

這裏寫圖片描述
* 3.4加載動態鏈接庫,在JNI類,也就是定義本地方法的類中添加靜態代碼塊,並在其中加載動態鏈接庫
這裏寫圖片描述

  • 3.5此時,進行編譯(Build->Rebuild Project),生成so庫,路徑在Build->intermediates->cmake->debug->obj 下
    這裏寫圖片描述

  • 3.6此時在MainActivity中調用改本地方法,看是否成功
    這裏寫圖片描述
    運行截圖如下:
    這裏寫圖片描述
    可見,輸入的是10,20,30,輸出的是20,30,40,運行成功,這裏java調C就完成了

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