在 Lollipop 之前的设备上安装为 Lollipop 编译的 apk 时会发生什么?
What happens when installing apk compiled for Lollipop on pre Lollipop devices?
我的应用程序中有超过 64k 个方法。
当我点击 "Run" 按钮和 pre Lollipop 设备 connect4d 时,出现 64k 方法错误。
当我点击 "Run" 按钮并连接 Lollipop 或更高版本的设备时,将创建 apk。
当我在 Lollipop 之前的设备上安装此 apk 时会发生什么?它运行正常,但有风险吗?
如果方法超过 64K,请使用 MultiDex。
在 build.gradle 中添加 multidex 依赖项。
compile 'com.android.support:multidex:1.0.1'
在 defalutConfig 中添加
multiDexEnabled true
对清单进行更改:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
如果您已完成上述更改,请遵循此 link
I have more than 64k methods in my app.
如果您的应用有超过 64k 个方法,并且您想 运行 在 Lollipop 之前的设备中使用它,那么您必须启用 Multidex。否则,您的代码将被编译成多个 DEX 文件(例如 classes.dex、classes2.dex、classes3.dex 等),但 Lollipop 之前的设备只会加载第一个 DEX文件并忽略辅助 DEX 文件中的 classes。
What happens when i install this apk on a pre lollipop device?
安装将会成功。您可能会在 logcat 中看到有关 "classes failing to validate" 的警告消息,但安装仍会成功。
it runs ok but is it risky?
不会运行。应用程序可能会启动甚至 运行 一段时间,但一旦系统尝试加载打包在其中一个辅助 DEX 文件中的 class,应用程序就会崩溃并显示 ClassNotFoundException
.如果您尝试打开的 Activity
或 Service
使用上述 class 之一,这可能会立即发生,但也可能稍后在您执行某些需要一个的代码路径时发生其中
无论哪种方式,最好的解决方案是使用 ProGuard 或类似工具来消除未使用的代码并使您的应用程序低于 64k 方法限制。如果这不起作用,唯一的其他选择是按照 official guide 中的说明和建议继续支持 Lollipop 之前的设备。
我的应用程序中有超过 64k 个方法。
当我点击 "Run" 按钮和 pre Lollipop 设备 connect4d 时,出现 64k 方法错误。
当我点击 "Run" 按钮并连接 Lollipop 或更高版本的设备时,将创建 apk。
当我在 Lollipop 之前的设备上安装此 apk 时会发生什么?它运行正常,但有风险吗?
如果方法超过 64K,请使用 MultiDex。
在 build.gradle 中添加 multidex 依赖项。
compile 'com.android.support:multidex:1.0.1'
在 defalutConfig 中添加
multiDexEnabled true
对清单进行更改:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
如果您已完成上述更改,请遵循此 link
I have more than 64k methods in my app.
如果您的应用有超过 64k 个方法,并且您想 运行 在 Lollipop 之前的设备中使用它,那么您必须启用 Multidex。否则,您的代码将被编译成多个 DEX 文件(例如 classes.dex、classes2.dex、classes3.dex 等),但 Lollipop 之前的设备只会加载第一个 DEX文件并忽略辅助 DEX 文件中的 classes。
What happens when i install this apk on a pre lollipop device?
安装将会成功。您可能会在 logcat 中看到有关 "classes failing to validate" 的警告消息,但安装仍会成功。
it runs ok but is it risky?
不会运行。应用程序可能会启动甚至 运行 一段时间,但一旦系统尝试加载打包在其中一个辅助 DEX 文件中的 class,应用程序就会崩溃并显示 ClassNotFoundException
.如果您尝试打开的 Activity
或 Service
使用上述 class 之一,这可能会立即发生,但也可能稍后在您执行某些需要一个的代码路径时发生其中
无论哪种方式,最好的解决方案是使用 ProGuard 或类似工具来消除未使用的代码并使您的应用程序低于 64k 方法限制。如果这不起作用,唯一的其他选择是按照 official guide 中的说明和建议继续支持 Lollipop 之前的设备。