问题
我构建我的应用程序并在5个Android设备上安装了相同的apk。 apk是3MB大,但安装时的大小因设备而异。我想知道为什么会这样,以及如何解决这个问题。
测试
在我在Play商店发布我的应用程序之前,我想弄清楚导致应用程序大小变化的原因以及我可以做些什么来减少最大大小。我还发现它的安装尺寸是我两个nexus 5上最大的,因为它们有最新的Android版本的测试手机,我的应用程序使用最新的Android appcompat和设计库。
编辑:我注意到instalation文件夹包含原始apk + odex文件。在我的nexus 5上,.odex文件大约25MB。快速谷歌后我也发现odex文件有助于加快你的应用程序。我注意到的另一件事是,如果我删除.odex文件,应用程序仍然可以正常运行,并且它要小得多。
然而,这不是我的问题的解决方案,因为我不能要求我的应用的用户根据他们的手机删除.odex文件。有没有办法减少.odex文件的大小?
代码
注意我正在使用jack来在我的代码中使用lambdas。并且minify未启用,因为jack处理缩小因此不再需要proguard(来源:https://source.android.com/source/jack)。
另外值得注意的是compile fileTree(dir: 'libs', include: ['*.jar'])
只添加了一个小的< 2k行库,只有36KB。您可以在此处找到此库:https://github.com/flaghacker/SuperTTTApi
的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.henrykvdb.sttt"
minSdkVersion 16
targetSdkVersion 25
versionCode 8
versionName "0.0.10"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.google.firebase:firebase-core:10.2.4'
compile 'com.google.firebase:firebase-ads:10.2.4'
compile 'com.google.firebase:firebase-crash:10.2.4'
}
apply plugin: 'com.google.gms.google-services'
顶级build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.android.tools.build:gradle:2.3.1'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
整个项目:
https://github.com/henrykvdb/SuperTTTAndroid
APK:
https://github.com/henrykvdb/SuperTTTAndroid/releases/tag/v0.0.10