本文原作者为:kale2010 .blog地址:http://www.cnblogs.com/tianzhijiexian/
微博:https://weibo.com/shark0017
Gradle技巧
全局配置
Android工程的每个module都有一个自己私有的build.gradle(绿色部分),而整个项目的根目录中也有一个build.gradle(灰色部分),我们这里谈论的全局配置基本都是在根build.gradle中进行的。

2.配置maven的url为本地地址:
allprojects {
repositories {
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/module_name/libs/android" // 路径是根据放置的目录来定的
}
}
}
3.正常使用:
dependencies {
implementation 'com.facebook.react:react-native:0.32.0'
}
这里用到了$rootDir来屏蔽多个开发者机器环境的差异性,保证了项目的兼容性。
依赖冲突
我们依赖本地jar的时候可能会出现jar中也打包了别的库代码的情况,如果是aar我们可以通过gradle来做处理,但在面对依赖冲突的时候,jar文件就变得令人棘手了。
shevek/jarjar是一个再次打包工具,它可以为我们提供一次性更换包名的功能,是一个解决一来冲突的利器。
它还提供了gradle的脚本来操作你依赖的jar文件:
dependencies {
// Use jarjar.repackage in place of a dependency notation.
compile jarjar.repackage {
from 'com.google.guava:guava:18.0'
classDelete "com.google.common.base.**"
classRename "com.google.**" "org.private.google.@1"
}
}
这回我们尝试通过手动的方式来操作gson.jar,我们希望把原本的com.google.gson的包换为com.gg.gson。
1.先建立一个rule.txt的文本文件,内容:
rule com.google.gson.** com.gg.gson.@1
2.执行命令:
java -jar jarjar.jar process rule.txt gson.jar gg.jar
执行后我们可以看到在当前目录生成了一个gg.jar的文件,分析后就可以发现其内容已经变了:

jarjar并不提供修改META-INF的功能,但这并不影响我们使用。
如果你想要删除特定包或特定的类,那么就在rule.txt中加入zap命令。
rule com.google.gson.** com.gg.gson.@1
zap com.google.gson.reflect.TypeToken // 删除某个类
zap com.google.gson.stream.**
zap com.google.gson.annotations.**
zap com.google.gson.internal.**
原始的gson:

删除后:

除了上面提到的rule、zap外还是有keep。首先zap会删除需要删除的所有类,然后执行rule替换符合要求的类,最后如果配置了keep的话,将不符合规则的所有类的移除,只保留keep指定的包。总结来说,这三条命令的执行优先级是:zap > rule > keep。
需要注意的是:jarjar无法支持反射,如果jar包内有使用反射调用的情况,替换操作是十分危险的。
另一个插件dinuscxj/ClassPlugin还提供了替换依赖中的类的功能,有兴趣可以尝试一下。
题外话:
对于aar文件,我们只有将aar解压后对解压的jar进行处理,最后再打包成aar。
资源管理
多个manifest
指定资源目录
微信组件化
替换资源的前缀
还没有写!!!!!
总结
还没有写!!!!!
网友评论