手记

android studio 创建的安装包有的机型安装后不能运行

在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文件

  1. buildscript {  

  2.     repositories {  

  3.         jcenter()  

  4.         // google()   

  5.         maven {  

  6.             url 'https://maven.google.com/'  

  7.             name 'Google'  

  8.         }  

  9.     }  

  10.     dependencies {  

  11.         classpath 'com.android.tools.build:gradle:2.1.2'  // 将版本从3.1.1改为2.1.2, 同时注释掉google(), 改为maven库地址  

  12.         // classpath 'com.android.tools.build:gradle:3.1.1'   

  13.     }  

  14. }  

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就可以了。-. -||| 

  1. android {  

  2.     ...  

  3.     defaultConfig {  

  4.         ...  

  5.         multiDexEnabled false  // 由 true 改为 false  

  6.     }  

  7. }  

主要是以前的项目是用eclipse开发的,然后我接手后导入到AS中了,AS自动默认的multiDexEnabled=true,最开始没看到,所以浪费了很多时间。

然后再看apk的分析,就不会出现多个 classes.dex,只有一个了。

原文出处

0人推荐
随时随地看视频
慕课网APP