1. 程式人生 > >android 調用c文件生成so庫並調用

android 調用c文件生成so庫並調用

dem ges classes lib fault rms img div 節點

公司需要做一個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庫並調用