gpt4 book ai didi

android - 即时应用程序低于 4mb 困难。如何减小 apk 大小

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:44 26 4
gpt4 key购买 nike

我在将 apk 小于 4mb 时遇到困难。检查生成的免安装应用 APK 后我看到 com.google.android.gms.internal 几乎是 1.4mb。我只是找不到这个大块的原因。一定是某种依赖。

enter image description here

我的基本 list 文件如下所示:

dependencies {

api "com.android.support:design:$rootProject.supportLib"
api "com.android.support:support-fragment:$rootProject.supportLib"

api "com.android.support:appcompat-v7:$rootProject.supportLib"
api "com.android.support:recyclerview-v7:$rootProject.supportLib"
api "com.android.support:cardview-v7:$rootProject.supportLib"

api 'com.android.support.constraint:constraint-layout:1.0.2'
api "com.google.code.gson:gson:$rootProject.gson"
api "com.google.firebase:firebase-core:$rootProject.googleLibs"
api "com.google.firebase:firebase-ads:$rootProject.googleLibs"
api "com.google.firebase:firebase-appindexing:$rootProject.googleLibs"
api "com.google.android.gms:play-services-auth:$rootProject.googleLibs"
api "com.android.support:multidex:$rootProject.multidex"
api "com.github.bumptech.glide:glide:$rootProject.glide"
annotationProcessor "com.github.bumptech.glide:compiler:$rootProject.glide"
api "com.loopj.android:android-async-http:$rootProject.asyncHttp"

api "org.greenrobot:eventbus:$rootProject.greenRobotEventBus"
api "com.vincentbrison.openlibraries.android:dualcache:$rootProject.dualcache"
api('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
transitive = true;
}

最佳答案

我刚刚完成了相同的操作,将 Instant Apps 的大小从 13MB 增加到 4MB。

经过这么多的头痛和无数的时间,我发现以下包的大小取决于你包含的依赖项。

  1. com.google.android.gms.internal
  2. android.support.v4.internal
  3. android.support.v7.internal

例如,如果排除广告依赖项,内部大小将至少减少 500kb。 Android 支持库也是如此,排除 CardView 并查看支持的内部大小缩小。

我将逐步列出我为超大型应用程序制作多功能即时应用程序模块时遇到的所有麻烦:

移动仅在主应用中使用的依赖项

在您的情况下,以下 2 项对于 Instant App 绝对无用,只能在主应用程序中使用:

api "com.google.firebase:firebase-appindexing:$rootProject.googleLibs"
api "com.android.support:multidex:$rootProject.multidex"

将它们移至主应用程序,如果代码与您的 View 相结合但您必须修复它,则移动 Appindexing 可能会很困难。在我的例子中,我必须从基本模块中的 View 实例化 AppIndexing,所以我使用 Otto (EventBus) 来实现。在基本模块中创建一个事件,触发它并在主应用程序的 AppIndexing 帮助程序类中捕获。

从所有包中明确排除 google 支持组

它可能看起来很荒谬,但大小不言而喻,更改所有 Google/Android 支持依赖项并明确排除:

api("com.android.support:design:$rootProject.supportLib") {
exclude group: 'com.android.support'
}
api("com.android.support:support-fragment:$rootProject.supportLib") {
exclude group: 'com.android.support'
}
api("com.android.support:appcompat-v7:$rootProject.supportLib") {
exclude group: 'com.android.support'
}
api("com.android.support:recyclerview-v7:$rootProject.supportLib") {
exclude group: 'com.android.support'
}
api("com.android.support:cardview-v7:$rootProject.supportLib") {
exclude group: 'com.android.support'
}
api('com.android.support.constraint:constraint-layout:1.0.2') {
exclude group: 'com.android.support'
}
api("com.google.firebase:firebase-core:$rootProject.googleLibs") {
exclude group: 'com.android.support'
}
api("com.google.firebase:firebase-ads:$rootProject.googleLibs") {
exclude group: 'com.android.support'
}
api("com.google.firebase:firebase-appindexing:$rootProject.googleLibs") {
exclude group: 'com.android.support'
}
api("com.google.android.gms:play-services-auth:$rootProject.googleLibs") {
exclude group: 'com.android.support'
}

为每个模块启用 Proguard

正如其他人所提到的,enable proguard for each module . proguard 减少了我们原来 13MB 的大约 25%。

排除不会在免安装应用中使用的功能

登录:

对我们来说,登录功能不需要在 Instant App 中。因此,我将与登录/身份验证相关的所有内容都移到了主应用程序中,并使用事件总线在需要的地方从基本模块触发操作。例如,抽屉导航中的登录/注销操作(隐藏在 Instant App 中但在主应用程序中可见)存在于基本模块中。因此,我为每个事件触发一个事件,并在主应用模块中捕获它以显示登录屏幕或进程注销。

这使我能够从基本模块中排除 com.google.android.gms:play-services-auth 依赖项,从而进一步减小了 gms 内部结构的大小。

广告:

我们不得不将广告从我们的基本模块中移出到主应用程序中,这仅仅是为了尺寸的目的。为此,我们使用类似的技术(事件总线)调用从基础模块渲染广告,并通过辅助类在主应用程序中进行实际渲染。

这使我们能够删除 com.google.firebase:firebase-corecom.google.firebase:firebase-ads

P.S:功能排除完全取决于您的需求/想要/妥协。我们做出这些决定是因为我们希望我们所有的创收功能都在 Instant App 中。所以只要我们能赚钱,我们就不在乎广告或登录。

希望这对您有所帮助。

关于android - 即时应用程序低于 4mb 困难。如何减小 apk 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com