库依赖性会增加 APK 的大小吗?

Do library dependency increase size of APK?

我的项目中有多个库,例如

dependencies {
    compile files('libs/universalloaderlibrary.jar')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'com.android.support:recyclerview-v7:22.2.1'
    compile 'com.android.support:cardview-v7:22.2.1'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    //noinspection GradleCompatible
    compile 'com.google.android.gms:play-services-gcm:7.3.0'
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.loopj.android:android-async-http:1.4.8'
    compile 'com.android.support:multidex:1.0.1'
}

和其他图书馆。 他们是否过多地增加了应用程序的大小。我的项目中有超过 25 个库。现在 APK 大小为 11 MB,我必须在其中添加更多功能。 可能是什么原因?

关于这个我有一些问题。

What takes more memory ?

  1. 项目中添加了模块。
  2. 文件添加为 JAR 文件。
  3. Gradle 我们添加的依赖就像 compile 'com.android.support:appcompat-v7:22.2.1'.

我读到通过启用 Proguard 设置 minifyEnabled true 可以减小应用程序大小。

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}

他们是如何在幕后工作的?

我们应该避免在项目中使用多个库吗?

关于减小 APK 大小,我心中有很多问题。 任何形式的建议和帮助都将不胜感激。 提前致谢。

是的,依赖项加上项目自己的源代码编译的输出,被发送到 dex 进行字节码转换并包含在最终的 APK 中。

有了proguard,不用的类可以被系统地移除

所有这三种方法都会增加 APK 的大小。它们之间的区别在于源代码位于何处:

  • 模块依赖项是本地计算机上的源代码。当您构建应用程序时,它会被编译成字节码。
  • JAR 文件是预编译的字节码。它也在你的本地机器上,但它不是真正的源代码。字节码只是在您构建时添加到您自己的。
  • Gradle 依赖与使用 JAR 文件基本相同,只是 Gradle 将下载预编译的工件,而不是将其作为文件添加到本地计算机上。

尽管如此,依赖项将其 类 贡献给构建,它们将出现在最终输出(APK)中。

Proguard 做了一些可以减小 APK 大小的事情。它可以静态分析所有字节码并删除 类 和从未使用过的方法。它还可以将 类、字段和方法重命名为更小的标识符,如 "abc",这可能会稍微缩小字节码的大小。