android 調用c文件生成so庫並調用
公司需要做一個sdk,裏面需要用到別人寫的c文件,第一次做,各種百度,各種學習,現在做一個小總結:
一、新建一個project:例 ExampleDemo, 包名為:com.demo.example;
二、為項目配置ndk環境:
1、下載android ndk,並解壓,我的存放目錄為:D:\sl\android-develop\android-ndk-r14b;
2、點擊進入Project Structure
3、在彈出框中選中 SDK Location 標簽,在 Android NDK Location中選中ndk路徑:
4、查看local.properties
5、gradle.properties項目的末尾添加這行代碼:android.useDeprecatedNdk=true
三、開始創建操作;
1、新建一個class,添加native方法:
2、執行Build --》Make Project:
完成後可以看到,我們生成了他的class文件
四、命令行生成.h文件
1、打開Terminal
2、在命令行輸入,進入main文件: cd app/src/main
執行編譯命令: javah -d jni -classpath [你的sdk路徑]\platforms\android-22\android.jar;….\build\intermediates\classes\debug [你的包名+包含native方法的類]
我的是:
G:\demo\QRreinrein\app\src\main>javah -d jni -classpath D:\sl\android-develop\android-sdk-windows\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug com.cirein.qrcode.QRCodeManager
完成後會在mian文件夾下生成一個jni文件,下面就是我們生成的.h文件:
文件中的內容為:
現在開始實現.h文件裏面的方法:將.h文件復制拷貝到jni,並重命名為:main.c
註:將其他的c文件也可以拷貝到jni文件夾下,在打so庫的時候會一並打入;
對main.c文件進行編輯:
打開app Module的build.gradle文件,在defaultConfig節點裏添加以下代碼,並執行同步操作
五、生成SO文件
執行:
完成後就可以看見生成的so文件了:
六、使用生成的so文件:
1、新建一個module,命名為Test,包名可以自定,
2、在\main下新建文件夾jniLibs,並將生成的SO文件拷貝到該文件夾下
2、在main\java 新建包,這個包名必須和創建so時調用c文件的類包名一樣:com.cirein.qrcode,並將剛才的QRCodeManager復制到此包下,類名也必須與開始調用的類名相同;
3、在MainActivity中進行調用輸出:
註:在同一個項目裏面新建Test後,前面生成的so文件會消失,此時只需要重新 Rebuild project 一下即可
android 調用c文件生成so庫並調用