序号
|
名称
|
坑深度
|
内容
|
||
---|---|---|---|---|---|
1 | JPush |
17 | resourcePrefix |
设置了resourcePrefix值后,所有的资源名必须以指定的字符串做前缀,否则会报错。 |
|
18 | 引用aar |
在Android Studio中创建一个module或者导入一个module的时候,如果这个module中依赖了aar库,当build工程的时候,会出现failed to resolve这个错误。 需要在引用这个module之前的每一个module或app的build.gradle里面,添加如下代码:
|
|||
19 | 手动替换aar |
需要关闭android studio然后重新打开,不然死活识别不出来。 | |||
20 | Multiple dex files define Lcom/xx/xx/BuildConfig | 解决方法一:找到引用的aar包,用压缩软件打开,把里面的BuidConfig给删了,然后引用删除后的包 解决方法二:在library工程的build.gradle中的android范围内加入:packageBuildConfig(false) |
|||
21 | 使用ButterKnife后的混淆 | 由于使用了R2这个资源文件,所以在混淆的时候需要增加排除对R2的混淆,如下: -keep class **.R$* {*;} -keep class **.R2$* {*;} |
|||
22 | 找不到资源文件:NoSuchFieldError | 开发的时候,通过 Ctrl+右键 能够正确找到相应的ResId,但是一旦运行起来,无论是通过ButterKnife还是findViewById都会报此错。此种情况需要检查是否module的layout命名与其他module有冲突,重命名layout文件名称后即可解决。 建议在不同的module之间配置 gradle:resourcePrefix "xxx_" 加以区分格式 |
|||
23 | ButterKnife | module工程里面必须引用annotationProcessor 'com.jakewharton:butterknife-compiler:8.x.x' 不然会出现控件绑定失效,导致OnClick等这样的事件无法实现 |
|||
24 | APP+Library +productFlavors+buildTypes |
好处:library工程根据app工程传过来的参数进行个性化配置,比如测试环境or正式环境。 详情参加:http://blog.csdn.net/wenyiqingnianiii/article/details/70183816 打包注意: developCompile project(path: ':library', configuration: 'developDebug') 1、这样的打包形式,以在app工程的build.gradle脚本为例: developCompile的develop表示app的Flavors;configuration的developDebug表示library工程的flavors是develop,buildTypes是debug; 所以在library中必须有对应的flavors。 2、app工程向library工程传值 (1)library可以通过libraryVariants.all、variant.buildType.name、variant.flavorName来判断由app传入的值是什么,从而进行个性化处理。 (2)当然,library还可以通过直接在buildTypes、productFlavors脚本里面编写代码进行个性化处理。注:publishNonDefault true (3)app工程初始化的时候,可以调用library工程的类进行初始化设定。 3、打包的时候,左下角的Build Variants选择Build Variant的时候,需要对应app脚本中xxxCompile的信息。 如按照上述脚本,应该选择app:developDebug,library:developDebug。 同样,在右上角的Gradle脚本里面,也要选择对应的脚本名称,比如这个脚本的名称为:assembleDevelopDebug。 |
|||
25 | library二次引用 | 注:一定要以maven的形式compile进来;如果library工程有jar包,app工程要把重复的jar包去掉。 1、比如A工程引用了B库,B库引用了C库,如果A工程引用了C库,那么C库知会被引用一次,并且是最新版本的。 如果B库引用的C库是1.0版本,而A工程引用的C库是1.1版本,那么在A工程里面知会引入C库的1.1版本。 所以不用担心C工程二次引用重复的问题。但如果是jar包则不行。 2、可以用+号表示永远引用最新版本的库工程,比如compile 'com.midea.smart.lib:lib-ui:+',但不建议这样引用。推荐写成固定的版本。 原因: 每次build时会向网络进行检查,国内访问仓库速度很慢; 库更新后可能会更改内部逻辑而带来bug,动态版本无法通过git的diff来规避此问题; 每个开发者都可能会得到不同的最新版本,带来潜在隐患。 3、比如A工程引用了B库,B库引用了C库,如果A工程引用了C库,但是B库引用的C库groupId不一样, 这样会造成的结果就是,A工程知会引入B库所引用的C库的版本,比如B库引用的C库的版本是2.0,而app工程引用的C库的版本是2.1, 这样的情况下,app工程只会引入2.0版本的C库,这是一个坑,不过也不是经常遇到。 |
|||
26 | Android Studio引用版本号 | android studio的坑,compile的版本号如果以前引用过的话,后面修改后,如果保持版本号不变,android studio再次引用进来会导致一些莫名其妙的问题。 解决方案: 按照maven的版本管理规范,后续将maven上面的版本正式管理起来,有变更时版本号往上增加: |
|||
27 | Maven上传 | library生成的aar或jar要注意只能生成一个,要门debug要么release,不要两个都一起生成,这样都会传到maven上。 | |||
28 | 工程编译速度慢 | 工程编译速度慢,主要跟以下两种情况有关,我们可以针对性地做出一些优化措施: 1、Flavors+BuildType组合,编译出来的library工程的aar包很多,导致编译速度慢; 解决措施:确定library是否需要flavors和buildtype,如果不需要,就可以不用用这种组合编译方式编译,可以只选择一个。 2、settings.gradle中包含的library工程太多,这个影响是致命的。 解决措施:将library工程的aar包,放到app工程的libs里面,在app里面引用aar。 |
|||
29 | 错误: 找不到符号 | app工程引用library工程的时候,有时候会发现“错误: 找不到符号”这个错误,但是跳转到代码处有没有报错。 实际上这个原因是因为library工程中将混淆开启了,所以需要将library的minifyEnabled设置为false!不能用混淆! |