【问题标题】:Multiple APKs for screen densities still include all resources and APK file size stays same屏幕密度的多个 APK 仍然包含所有资源,并且 APK 文件大小保持不变
【发布时间】:2018-01-06 08:53:17
【问题描述】:

我的游戏应用包含 4 个代表不同游戏板的大型 PNG 图像:

为了减少 APK 文件的大小,我遵循了 Build Multiple APKs 文档并将以下部分添加到 app/build.gradle 文件中:

splits {
    density {
        enable true
        reset()
        include "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"
    }
}

之后,我在 Android Studio 菜单中选择 Build -> Generate Signed APK...

令人惊讶的是,APK 文件仍然具有相同的文件大小:

并且Analyze APK...显示仍然包含所有屏幕密度的资源:

请问我在这里遗漏了什么,如何排除不需要的资源?

我的整个 app/build.gradle 如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        resConfigs "en"
        applicationId "com.example"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    splits {
        density {
            enable true
            reset()
            include "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "com.android.support:appcompat-v7:$supportLibVersion"
    compile "com.android.support:cardview-v7:$supportLibVersion"
    compile "com.android.support:customtabs:$supportLibVersion"
    compile "com.android.support:design:$supportLibVersion"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile "com.google.android.gms:play-services-auth:$firebaseLibVersion"
    compile "com.google.firebase:firebase-messaging:$firebaseLibVersion"
    compile 'com.android.billingclient:billing:1.0'
    compile 'com.github.bumptech.glide:glide:4.3.1'
    compile 'com.neovisionaries:nv-websocket-client:2.3'
    compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
    compile 'com.facebook.android:facebook-android-sdk:4.28.0'
    testCompile 'junit:junit:4.12'
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

apply plugin: 'com.google.gms.google-services'

【问题讨论】:

    标签: android android-studio android-gradle-plugin apk android-studio-3.0


    【解决方案1】:

    我在/r/androiddev 得到了答案 - APK 拆分仅适用于 drawables,但不适用于 mipmap 目录。

    移动我的 PNG 文件后,APK 文件大小减小了:

    为了批量移动我的所有资源,我在终端中使用了以下 shell 命令:

    for f in ./app/src/main/res/mipmap-{mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}/game_board_*.png;做 echo git mv -v "$f" "${f/mipmap/drawable}";完成

    (删除“echo”以运行实际命令)。

    【讨论】:

    • mipmap 文件夹必须包含应用程序图标,不得包含其他内容。
    • 为什么要在APK文件中包含所有的应用程序图标分辨率?
    • 与 drawable 目录不同,所有 mipmap 目录都保留在 APK 中,即使您构建特定密度的 APK 也是如此。这允许启动器应用选择最佳分辨率图标以显示在主屏幕上。 developer.android.com/training/multiscreen/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多