Android应用程序大小因设备而异

时间:2017-05-01 22:04:57

标签: java android gradle build android-gradle

问题

我构建我的应用程序并在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

0 个答案:

没有答案