如何在Android Gradle中添加原生so文件依赖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Android Gradle中添加原生so文件依赖相关的知识,希望对你有一定的参考价值。
android Studio & GradleAndroid的Gradle插件能够很好的处理使用maven仓库的所有的jars依赖(以及其他)。
例如,在build.gradle文件中声明依赖:
dependencies
classpath 'commons-io:commons-io:2.4'
但是当需要依赖原生函数库时就遇到问题了,类比于Maven,咱们不再能够以下面这种方式来加载了:
dependencies
classpath 'com.snappydb:snappydb-native:2.+:arm-v7a'
参考技术A 过Maven仓库发布我们的函数库没有什么问题(只要你通过繁琐的发布流程),maven-android-plugin可以帮助我们包含共享库。Maven依赖规则使得我们可以指定想要获取的ABI(不同的CPU架构)的类型以及函数库的格式(我们的是.so格式)。
例如,为SnappyDB获取ARM平台共享库:
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-native</artifactId>
<version>0.2.0</version>
<classifier>armeabi</classifier>
<type>so</type>
</dependency>12345671234567
如果你使用的是Maven+Eclipse ADT来构建你的Android应用,使用这个方法没有问题,但如果你将工程迁移到Android Studio+Gradle上,问题就来了。
Android Studio & Gradle
Android的Gradle插件能够很好的处理使用maven仓库
使用 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 插件 0.7.3 在项目中添加预构建的 .so 文件
如何在 Android Studio 中添加 .so、.mk 等原生文件?