库依赖性会增加 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 ?
- 项目中添加了模块。
- 文件添加为 JAR 文件。
- 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",这可能会稍微缩小字节码的大小。
我的项目中有多个库,例如
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 ?
- 项目中添加了模块。
- 文件添加为 JAR 文件。
- 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",这可能会稍微缩小字节码的大小。