如何在Android Gradle中添加原生so文件依赖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Android Gradle中添加原生so文件依赖相关的知识,希望对你有一定的参考价值。

参考技术A  android-native-dependencies是一个自动处理查找&下载&拷贝原生函数库依赖到jniLibs目录的Android插件,这样在APK构建过程中可以自动包含这些函数库。
  这个插件使用跟声明查找jar包一样的仓库,下面是一个例子:
  buildscript
repositories
mavenCentral()

dependencies
classpath 'com.android.tools.build:gradle:0.10.+'
classpath 'com.nabilhachicha:android-native-dependencies:0.1'


apply plugin: 'android'
apply plugin: 'android-native-dependencies'
native_dependencies
artifact 'com.snappydb:snappydb-native:0.2+:armeabi'
artifact 'com.snappydb:snappydb-native:0.2+:x86'

dependencies
//regular Jar dependencies ...

  规约
  DSL artifact遵循Maven artifacts的命名规则。因此,我们下面两种语法都可以使用:
  group:name:version[:classifier]缩写
  //adding x86 classifier will resolve only intel's (.so) lib
native_dependencies
artifact 'com.snappydb:snappydb-native:0.2+:x86'

//omit the classifier will resolve all supported architectures
native_dependencies
artifact 'com.snappydb:snappydb-native:0.2+'

  映射风格
  //adding x86 classifier will resolve only intel's (.so) lib
native_dependencies
artifact group: 'com.snappydb', name: 'snappydb-native', version: '0.2+', classifier: 'x86'

//omit the classifier will resolve all supported architectures
native_dependencies
artifact group: 'com.snappydb', name: 'snappydb-native', version: '0.2+'

  在每种语法中,classifier都是可选的。这意味着,当忽略classifier时,插件将会尝试获取所有类型CPU架构(armeabi, armeabi-v7a, x86和mips)的artifacts。

使用 Android Gradle 插件 0.7.3 在项目中添加预构建的 .so 文件

【中文标题】使用 Android Gradle 插件 0.7.3 在项目中添加预构建的 .so 文件【英文标题】:Add pre-built .so files in project using Android Gradle plugin 0.7.3 【发布时间】:2014-01-20 22:55:59 【问题描述】:

很久以后,Android Gradle 插件 0.7.3 中添加了在 Android 项目中添加预构建 .so 文件的支持。但与我不同的是,很多人仍在使用 hack/workaround 添​​加预构建的 .so 文件,即使用特定层次结构压缩文件,然后重命名为 .jar。以下是如何正确添加 .so 文件的分步指南。

【问题讨论】:

【参考方案1】:

那么如何添加预构建的 .so 文件?

1) 将您的 android studio 升级到 0.4.0 2) 将 gradle-wrapper.properties 中的 "distributionUrl=" 替换为 "distributionUrl=http://services.gradle.org/distributions/gradle-1.9-all.zip" 3)添加/替换你的'buildscript'部分build.gradle:

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:0.7.3'
    
 

4)

5) 在 build.gradle 中添加以下内容:

android 
    compileSdkVersion 18
    buildToolsVersion "18.1.0"

    defaultConfig 
        minSdkVersion 10
        targetSdkVersion 18
    

    productFlavors 
        x86 
            ndk 
                abiFilter "x86"
            
        
        arm 
            ndk 
                abiFilters "armeabi-v7a", "armeabi"
            
        

    


    packagingOptions 
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/notice.txt'
    
    

6) 构建您的项目。

【讨论】:

@CrossleSong 不好意思,没看懂,能详细点吗? 预构建 NDK 库项目。我有一个 Android 库项目,有 prebuild so 文件。 @GilbertoIbarra 请分享您的脚本。【参考方案2】:

我终于实现了这段代码..

buildscript 
 repositories 
    mavenCentral()
 
 dependencies 
     classpath 'com.android.tools.build:gradle:0.7.3'
 

apply plugin: 'android'

repositories 
  mavenCentral()


android 

compileSdkVersion 19
buildToolsVersion "19.0.1"

defaultConfig 
    minSdkVersion 14
    targetSdkVersion 19


productFlavors 
    x86 
        ndk 
            abiFilter "x86"
        
    
    arm 
        ndk 
            abiFilters "armeabi-v7a", "armeabi"
        
    

packagingOptions 
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/notice.txt'


【讨论】:

以上是关于如何在Android Gradle中添加原生so文件依赖的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android Gradle中添加原生so文件依赖

使用 Android Gradle 插件 0.7.3 在项目中添加预构建的 .so 文件

如何在 Android Studio 中添加 .so、.mk 等原生文件?

[Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)

Android Gradle so文件注意事项

Android——如何编译生成SO文件