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


公司需要做一個sdk,里面需要用到別人寫的c文件,第一次做,各種百度,各種學習,現在做一個小總結:

借鑒:http://blog.csdn.net/u013210543/article/details/52103015

一、新建一個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方法的類]

     我的是:

D:\sl\androidstudioproject\qrcodedemo\QRCodeDemo>javah -d jni -classpath D:\sl\android-develop\android-sdk-windows\platforms\android-25\android.jar;app\src\main\java com.cirein.qrcod
e.QRCodeManager

  

  完成后會在項目中生成一個jni文件夾,下面就是我們生成的.h文件:

    

 

    文件中的內容為:

      

  現在開始實現.h文件里面的方法:將.h文件復制拷貝到jni,並重命名為:cirein.c(自己隨便定義名稱)

  注:將其他的c文件也可以拷貝到jni文件夾下,在打so庫的時候會一並打入;

  對cirein.c文件進行編輯:我的項目中使用了其他的c文件,所以就不貼詳細代碼了

    

  打開app Module的build.gradle文件,在defaultConfig節點里添加以下代碼,並執行同步操作

    

  我認為重要的是建Android.mk和Application.mk文件:

    我的Android.mk文件:

LOCAL_PATH := $(call my-dir)    //固定寫
include $(CLEAR_VARS)      //固定寫
LOCAL_MODULE    := CIRein    //生成的so名稱
LOCAL_SRC_FILES := cirein.c \ CIRein_Base64.c \ CIRein_XXTea.c      //用到的c文件
include $(BUILD_SHARED_LIBRARY)      //生成動態庫

    我的Applicationmk文件:

APP_ABI := all  //也可以指定格式

  

五、生成SO文件

  執行:ndk-build

D:\sl\androidstudioproject\qrcodedemo\QRCodeDemo>ndk-nuild

  完成后就可以看見生成的so文件了:

   

現在就可以使用.so文件了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM