android studio 導入so文件

基本上導入看起來都挺簡單的,分以下幾步

首先,在我們的Module的根目錄中建立libs目錄,將jpush集成SDK中的so文件分別拷入,截圖如下:

然後就是編寫我們的build.gradle文件。

關於so文件引入的配置很簡單,代碼配置如下:

    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {  
            destinationDir file("$projectDir/libs")  
            baseName "Native_Libs2"  
            extension "jar"  
            from fileTree(dir: "libs", include: "**/*.so")  
            into "lib"  
        }  
      
        tasks.withType(JavaCompile) {  
            compileTask -> compileTask.dependsOn(nativeLibsToJar)  
        }  


自定義一個任務,在其中指定項目所依賴的so文件的目錄,這裏用了**/*.so來寫,爲了省事,指定需要拷入的目錄 into "lib",那麼動態運行庫就被拷入到lib目錄中。

完整的build.gradle文件如下:

    apply plugin: 'com.android.application'  
      
    android {  
        compileSdkVersion 21  
        buildToolsVersion "21.1.0"  
      
        defaultConfig {  
            applicationId "com.wujay.footerballstar"  
            minSdkVersion 8  
            targetSdkVersion 21  
            versionCode 1  
            versionName "1.0"  
        }  
      
        buildTypes {  
            release {  
                runProguard false  
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
            }  
        }  
      
        task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {  
            destinationDir file("$projectDir/libs")  
            baseName "Native_Libs2"  
            extension "jar"  
            from fileTree(dir: "libs", include: "**/*.so")  
            into "lib"  
        }  
      
        tasks.withType(JavaCompile) {  
            compileTask -> compileTask.dependsOn(nativeLibsToJar)  
        }  
    }  
      
    dependencies {  
        compile fileTree(dir: 'libs', include: ['*.jar'])  
        compile 'com.android.support:appcompat-v7:21.0.0'  
        compile files('libs/jpush-sdk-release1.7.2.jar')  
        compile files('libs/umeng_sdk.jar')  
        compile files('libs/libammsdk.jar')  
    }  

之後出現了

“undefined reference to `android_log_print”

這類問題的解決方法是

  1、在源文件中添加如下頭文件:

  #include <utils/Log.h>

  2、在 Android.mk 文件中包含相關的庫:

  

  • 如果你生成的模塊是一個共享庫(.so),則將相關的庫文件包含入共享庫目錄:

  ... ...

  LOCAL_SHARED_LIBRARIES := liblog libcutils   #相關的庫文件,加入共享庫目錄

  ... ...

  include $(BUILD_SHARED_LIBRARY) #注意:生成共享庫 .so 文件

  

  • 如果你生成的模塊不是一個共享庫,比如是可執行文件,則將相關的庫文件包含入靜態庫目錄:

  ... ...

  LOCAL_STATIC_LIBRARIES := liblog libcutils   #相關的庫文件,加入靜態庫目錄

  ... ...

  include $(BUILD_EXECUTABLE) #注意:生成可執行文件

  3、在源代碼中需要打印 log 的地方執行:

  LOGE(logformat); //如:LOGE("my num is: %d", i); 或者LOGD, LOGW,大家應該知道怎麼區別吧



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