使用Gradle生成包含所有依赖库(.jar或.aar)的aar包
2015-04-15 11:36
531 查看
Android Library项目中如果使用Android Gradle plugin打aar包,通过maven依赖的库,或者是local依赖的aar都不会包含在生成的aar包里,如果项目是发布一个SDK,为了方便开发者使用,我们倾向于生成一个包含所有依赖库以及.so等文件的aar包。
通过反复研究和测试,以下Gradle脚本能满足需求,如果需要对代码运行ProGuard混淆,则需要使用Gradle 2.1
方法是为项目增加一个sub project(如
最后就可以使用
通过反复研究和测试,以下Gradle脚本能满足需求,如果需要对代码运行ProGuard混淆,则需要使用Gradle 2.1
方法是为项目增加一个sub project(如
pkg_project)专门用于打包,该项目中
build.gradle内容如下:
apply plugin: 'java'
version = 1.0
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:19.1.0'
}
}
repositories {
mavenCentral()
}
dependencies {
compile project(':<your_library_project>') //此处填写需要打包的Android Library Project name
}
task sync_jars() << {
//把所有依赖的.jar库都拷贝到build/aar/libs下
copy {
into buildDir.getPath() +"/aar/libs"
from configurations.compile.findAll {
it.getName().endsWith(".jar")
}
}
}
task sync_aars(dependsOn:':<your_library_project>:assembleRelease') << {
//把所有依赖的.aar库里包含的classes.jar都拷贝到build/aar/libs下,并重命名以不被覆盖
def jar_name
def aar_path
def dest_dir = buildDir.getPath()+"/aar"
configurations.compile.findAll {
it.getName().endsWith(".aar")
}.collect {
aar_path = it.getPath()
jar_name = "libs/"+it.getName().replace(".aar",".jar")
copy {
from zipTree(aar_path)
into dest_dir
include "**/*"
rename 'classes.jar', jar_name
}
}
}
task fataar(dependsOn:[sync_aars, sync_jars]) << {
task (obfuse_classes_jar, type: proguard.gradle.ProGuardTask) {
//把build/aar/libs/*.jar混淆后生成build/aar/classes.jar
configuration "proguard.cfg"
injars buildDir.getPath()+"/aar/libs"
outjars buildDir.getPath()+"/aar/classes.jar"
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
libraryjars "${System.getProperty('java.home')}/Contents/Classes/classes.jar"
libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar"
}.execute()
task (gen_aar, type: Zip) {
//把生成最终的aar包,注意libs目录需要被排除
def dest_dir = buildDir.getPath()+"/aar/"
baseName = "mysdk-all"
extension = "aar"
destinationDir = file(buildDir.getPath())
from dest_dir
exclude "libs"
}.execute()
}
最后就可以使用
gradlew pkg_project:fataar来打包了
相关文章推荐
- 使用Gradle生成包含所有依赖库(.jar或.aar)的aar包
- Androidstudio生成aar 和 jar (生产jar包含第三方的jar ,比如tsp.jar包含okhttp.jar) 以及 Module build.gradle引入aar资源
- 【Maven学习】Maven打包生成包含所有依赖的jar包
- 【Maven学习】Maven打包生成包含所有依赖的jar包
- 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包
- android studio gradle打包,怎么样通过打不同的包名所依赖的项目不同,即所生成的apk大小不一样呢(每个apk不包含所有的依赖的项目)
- Maven打包生成包含所有依赖的jar包
- Gradle打jar包,包含所有依赖
- Create a Bundle Jar With Ant:使用Ant创建一个包含所有依赖的JAR包
- 【Maven学习】Maven打包生成包含所有依赖的jar包
- 使用maven生成可执行jar包(包含依赖)
- 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包
- Maven打包生成包含所有依赖的jar包
- 【Maven学习】Maven打包生成包含所有依赖的jar包
- 在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]
- Maven Java Project打成jar包(包含依赖文件,依赖文件生成class文件),bat文件启动
- 根据已有项目下lib包里jar文件生成maven的pom.xml 里面所有依赖
- 使用Maven插件maven-dependency-plugin拷贝所有依赖的jar和pom文件
- 使用java简单实现的一个Spring框架(pom.xml仅包含Servlet jar包依赖)
- jar和aar在Android Studio中的生成和使用