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,大家应该知道怎么区别吧



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