Android Studio是个强大Android开发工具,每个新版本的发布都有带来新的惊喜和爽快,但是同时也带来惊吓和糟糕,这边文章就是收集开发中遇到的细节问题以及解决方法。
ADB链接不稳定,总是断和重连
遇到这样的问题,先是百度及google各种查,答案千篇一律,都不及解决问题,后来实在没有折,尝试升级studio、更换数据线还是不行,最后升级ADB 版本,在sdk tools里面包管理窗口找到升级项,就好了,稳定的很。
解析打包出的Apk没有versionCode和versionName
开发环境背景:Andorid studio 3.0.1+ buildToolsVersion ‘26.0.2’
问题:在apktool下反编译出的AndroidManifest.xml中没有versionCode和versionName配置,也通过不是一些apk检查工具,但是实际上是存在的,运行时候能解析出,有些工具也能解析出来。
这个问题就很奇怪,实际是有,但是有的工具就是解析不出来,但是又能解析出别人的apk,这就让我纠结了好久到底问题出在哪里。通过测试了好久了,就本环境下打包的apk确认在某平台下检查不出。所以只能把目光转移到本开发环境,想想之前好像没有这个问题,这个问题肯定是在打包环境下产生的,AndroidManifest是由aapt进行编译的,所以看下编译工具配置 buildToolsVersion ‘26.0.2’。难道是版本的问题,故修改了几次到低版本发现均不行,无奈之下突然发现了可以升级到27.0.3。抱着侥幸心里升级测试了下,特么还真可以。经过仔细测试,发现25和26都不行,貌似27解决了这个问题。
JavaLib添加第3方库编译通过运行找不到类:java.lang.NoClassDefFoundError
开发环境背景:Andorid studio 3.0.1+ buildToolsVersion ‘27.0.3’
问题:发生java.lang.NoClassDefFoundError异常,不能找到引用的第3方jar
根据问题类型,最先去排查是否对第3方库配置引用是否有问题,在javalib module中的build.gradle文件配置中发现已经compile了libs下的第3方库,并且src下java代码能正常引用第3方库的api,说明编译引用和配置都没有问题。那为何还是运行时候找不到Class呢。个人就随便找是否有其他配置生效的地方有问题,发现module下还有个xxxx.iml文件格式文件,打开一看这个是对module的项目配置,其中有个component配置如下,看起来有点蹊跷:
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6">
<output url="file://$MODULE_DIR$/build/classes/java/main" />
<output-test url="file://$MODULE_DIR$/build/classes/java/test" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" scope="PROVIDED" name="okhttp-3.2.0" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="okio-1.7.0" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="rxandroid-2.0.1" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="rxjava-2.1.3" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="reactive-streams-1.0.1" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="AXMLPrinter-1.0" level="project" />
</component>
可以发现所有的第3方库 配置scope=“PROVIDED” ,虽然当时不理解scope意思,但是provided是提供编译但是不导入包的意思,会在运行的时候产生找不到类。这个文件又是自动生成的,抱着尝试修改的态度,认为应该是COMPILE才是我们要的。故修改为scope=“COMPILE”,奇迹还真发生了,解决了问题。
Android Studio 代码报红,can not resolve symbol ,但能正常编译
最近几次代码报红,源码正常不能引用,一看定位具体类,发现目标类文件竟然没有了内容
以及本地开发的类也会突然出现了内容丢失,变成了空内容。
解决办法,删除old,重新下载库
对于android源码库 直接用sdk manager先删除旧的 再下载
对于dependecy的依赖库 直接删除.gradle/caches/module下的旧库 再更新build就可以了