Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Studio使用NDK編譯自己的.so庫

Android Studio使用NDK編譯自己的.so庫

編輯:關於Android編程

我們知道,Android架構中上層應用是以java來編寫的,而底層則用C/C++編寫。一般而言,上層android工程師在開發過程中,不會或很少涉及到C/C++層,但項目中一旦涉及到復雜的算法或耗時操作時(例如圖像處理等),通常使用C/C++完成算法實現並提供給java層(通過JNI)調用,以此提升軟件的運行效率。在這個過程中,C/C++所實現的代碼以及JNI調用相關的代碼被打包為.so庫,這即是所謂的目錄設備上的二進制動態庫(SHARED LIBRARY),而且.so庫更安全,不容易被反編譯。那麼如何打包自己的.so庫呢?

一、在Android studio 中配置NDK

\

 

在電腦的環境變量中加入NDK的路徑

\

測試

\

成功!!!OK。

二、新建一個工程,先做一下配置

1、在app的build.gradl下加入

 

 defaultConfig {
        applicationId "jni.svse.com.jnitest2"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk{
            moduleName "NDKDEMO"         //生成的so名字
            ldLibs "log", "z", "m"       //鏈接時使用到的庫
            abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。目前可有可無
        }
    }
2、在gradle.properties裡添加
android.useDeprecatedNdk=true
3、在main下新建一個JNI文件夾

\
會生成jni文件夾

三、新建調用C/C++的類
public class Load {
    static {
        System.loadLibrary("NDKDEMO");//NDKDEMO可以隨便取,但是必須和moduleName "NDKDEMO"  的名字一樣
    }
    public  static native  int Add(int a,int b);
}
此時Add會出現紅色,不要緊,Alt+Enter,android  studio會在jni下自動幫你生成NDKDEMO.c
#include 

JNIEXPORT jint JNICALL
Java_jni_svse_com_jnitest2_Load_Add(JNIEnv *env, jclass type, jint a, jint b) {

    // TODO在這裡編寫你的邏輯代碼

}
此時還沒有生成.so庫

\
\

 


<[>
以上2步後會在以下路徑生成你的.so庫了

\ 生成的類型是根據以下紅色來的
 ndk{
            moduleName "NDKDEMO"         //生成的so名字
            ldLibs "log", "z", "m"       //鏈接時使用到的庫
           abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。目前可有可無
 }

有了自己的.so庫怎麼使用呢

在新建一個工程,把.so庫放到jniLibs下,在工程下新建一個和.so庫包名一樣的Package,Java_jni_svse_com_jnitest2_Load_Add包名是jni.com.jnitest2,然後再把上面的Load 復制到這裡,在Activity裡就可以使用了

int value=Load.Add(23, 5);
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved