|
序号
|
名称
|
坑深度
|
内容
|
| — | — | — | — |
| 1 |
JPush
| | 极光推送的配置文件不能放在library工程里面,必须放到application工程中。 |
| 2 |
Resource IDs
| |
Resource IDs cannot be used in a switch statement in Android library modules.
Android Studio里面快捷转换方式:选中“switch”,ALt+Enter同时选中,弹出对话框,选择“Replace ‘switch’ with ‘if’”。
|
| 3 |
ButterKnife引用
| |
在library工程中,提示:Attribute value must be constant。
这是因为library中R.id.xxx 取R中变量的时候并非是final类型。
解决方法:
ButterKnife在8.0版本以上支持library内使用视图注入,原先app用的是7.x版本的,所以要先升级到8.x版本。
期间还需要将以前的R用R2代替。
有时候AS识别不了R2,需要多build几次。
|
| 4 |
ButterKnife点击
| |
接上所述,正常情况下,Butterknife的点击事件是这样的:
@OnClick({R2.id.btn_login, R2.id.btn_regist})
public void onClick(View view) {
int i = view.getId();
if (i == R2.id.btn_login) {
…
但现在的问题是,view.getId()获得的是R类中的id,而不是R2类中的id,特么的巨坑!!!
解决方法:
1、使用RCaster类做一个R到R2的转换。
2、不用ButterKnife响应click事件,就用android原生的onClick。
|
| 5 |
Dagger2
| |
Dagger2在各个组件工程里面有时候不会生成对应的文件,有时候生成了文件AS不能立刻识别,要等一段时间,可能这是dagger2和AS之间的bug吧。
解决方法:
第一步、在build-generated-source-apt-release下找到对应的daggerXXXX文件,然后双击打开。
第二步、点击Build–Make Module XXXX。
第三步、等一会AS就能识别出来。
|
| 6 |
annotationProcessor
| | apt已经停止更新,需要全面切换到annotationProcessor,以防止不必要的坑。 |
| 7 |
versionName、versionCode
| | application项目里面必须得有这两个属性。 |
| 8 |
拆分
| | 建议从原有工程中逐步将功能拆分至各个组件项目,而不是另起一个全新项目。 |
| 9 |
Service
| | service必须放到application项目中,不能放到library项目中,必须注意!!! |
| 10 |
BuildConfig
| |
application工程对library工程的依赖都是release依赖!!!
所以一些根据debug和release来判断的操作,需要放到application工程里面。
还有一种解决方案:publishNonDefault true
参考 http://www.jianshu.com/p/64f57439934b
|
| 11 |
So文件
| |
各个工程的libs里面的so文件,需要在各个工程的build.gradle文件中用如下方式引入,不然打包的时候so文件包含不进去:
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
|
| 12 |
AsyncTask
| |
asynctask在组件间调用的时候会出现AsyncTask java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[] 异常。
解决方案:
1、去掉泛型;
2、泛型将Void类型换成非Void类型。
|
| 13 |
ApplicationId
| |
applicaitonId和packageName的区别:
1、如果没有applicationId,则以packageName的值为应用包名;
2、如果有applicationId,则以applicationId的值为应用包名;
应用案例:
Module模块中,如果需要使用到极光推送的,而极光推送跟包名又是强相关的,
可以利用applicationId进行包名控制,而不需要去改动packageName。
|
| 14 |
JPush
| |
目前项目使用的JPush版本还是1.7.0。
在module作为单个apk独立运行时,会出现如下情况:
提示:
[AndroidUtil] The permissoin is required - android.permission.WRITE_SETTINGS
[AndroidUtil] You should make main activity extends InstrumentedActivity (JPush), otherwise you will not see user click and user active time start on report in Portal.
有两种情况:
(一)原因是这个版本在android api为23及以上使用时,不能够权限更改做判断;
目前解决方案是将targetSdkVersion设为21及以下。
但是在app壳工程里面targetSdkVersion设为23是可以的。
(二)原因是app没有签名。
在buildTypes里面要加上:signingConfig signingConfigs.debugConfig
|
| 15 |
Instant Run
| |
在Android Studio 2.3.3和Gradle 3.3环境下面,开启instant run后,整个项目的编译和单个组件的编译会异常耗时,而且会出现处理R.class时crash现象;
所以在平时调测过程中,需要将instant run关闭后编译。
|
| 16 |
编码问题
| |
org.gradle.jvmargs = -Dfile.encoding=UTF-8
如果jvmargs的设置如上,则会出现项目中png图片不能识别问题:
AAPT err(Facade for 169869688) : No Delegate set : lost message:\\?\xxx\base-core\build\intermediates\bundles\default\res\drawable-xhdpi-v4\query_loding5.png ERROR: Unable to open PNG file
|
| 17 |
resourcePrefix
| |
设置了resourcePrefix值后,所有的资源名必须以指定的字符串做前缀,否则会报错。
但是resourcePrefix这个值只能限定xml里面的资源,并不能限定图片资源,所有图片资源仍然需要手动去修改资源名。
|
| 18 |
引用aar
| |
在Android Studio中创建一个module或者导入一个module的时候,如果这个module中依赖了aar库,当build工程的时候,会出现failed to resolve这个错误。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://img-blog.csdnimg.cn/img_convert/df10e4fe1fc40c679e36e151315b23ed.jpeg)
尾声
一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!
为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!
再次感谢所有给我提供过题目的朋友们,感谢一路有你!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://img-blog.csdnimg.cn/img_convert/df10e4fe1fc40c679e36e151315b23ed.jpeg)
尾声
一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!
为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!
再次感谢所有给我提供过题目的朋友们,感谢一路有你!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!