在Android Studio中,直接Build -> Build APK(s)创建apk安装包,给测试人员测试的时候,安装运行后一直卡死在黑屏的状态,测试机是努比亚的一款手机,android 4.4版本,然后拿来联机测试,打印日志显示的是Dalvik虚拟机找不到某些类。
错误信息大致是: dalvik: can not find class xxx.class.
然后我就分析了apk包的结构,查看各个classes.dex文件下的类,发现dalvik找不到的类在包里是有的,后来我就怀疑是不是gradle构建的时候有问题,因为最近把AS从2.1版本升级到了3.1版本,gradle也就升级了。
后来换了gradle的版本,修改如下几个地方:
1. 修改gradle-wrapper.properties文件
将现在的
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-all.zip
1. 修改项目的build.gradle文件
buildscript {
repositories {
jcenter()
// google()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2' // 将版本从3.1.1改为2.1.2, 同时注释掉google(), 改为maven库地址
// classpath 'com.android.tools.build:gradle:3.1.1'
}
}
3. 修改module的build.gradle文件,将dependencies中添加依赖的关键字由implementation或api改为compile.
gradle升级后,废弃了compile的方式,改为了impelementation或api(需要了解的请自行查找资料,在此不赘述了)。
=================== 以下才算是我的解决方式 ======================
所有都改完成后运行app,问题解决了,在努比亚4.4这台手机上可以运行了,不会出现黑屏了,但是apk安装后为什么应用名称变了,有时候变成false,有时候变成“搜索”,这是什么原因,然后我又查看了apk包,在resources.arsc ->strings,发现app-name的字段是存在的,而且值也是正确的名称,就没搞懂了,因为一时找不到原因,而项目又急着要提交上去,所以我最后还是把gradle改回以前的版本,在此基础上解决黑屏不能运行的原因。最后终于解决了!一个很简单的原因,android5.0以前的版本是不支持分包的,方法数有65535的限制。而我在build.gradle中尽然配置了multiDexEnabled=true. 只要改为false就可以了。-. -|||
android {
...
defaultConfig {
...
multiDexEnabled false // 由 true 改为 false
}
}
主要是以前的项目是用eclipse开发的,然后我接手后导入到AS中了,AS自动默认的multiDexEnabled=true,最开始没看到,所以浪费了很多时间。
然后再看apk的分析,就不会出现多个 classes.dex,只有一个了。