Java 减少android应用程序(apk)的大小
我现在将在Google play store上发布我的第一个应用程序。我已经压缩了应用程序中使用的图像。我有一些关于应用程序大小的问题 如果应用程序的大小小于2MB,则用户卸载应用程序的可能性较小,我的这一说法是否适用于属于教育领域的应用程序? 然而,当我在windows中看到我的apk文件时,它显示为3.10 MB,但当它安装在设备中时(从应用程序信息查看),它显示:Java 减少android应用程序(apk)的大小,java,android,jar,apk,proguard,Java,Android,Jar,Apk,Proguard,我现在将在Google play store上发布我的第一个应用程序。我已经压缩了应用程序中使用的图像。我有一些关于应用程序大小的问题 如果应用程序的大小小于2MB,则用户卸载应用程序的可能性较小,我的这一说法是否适用于属于教育领域的应用程序? 然而,当我在windows中看到我的apk文件时,它显示为3.10 MB,但当它安装在设备中时(从应用程序信息查看),它显示: Total............................8.68 MB App...................
Total............................8.68 MB
App..............................7.02 MB
USB storage app..................0.00 B
Data.............................1.66 MB (perhaps it is the size of sqlite db + ttf's)
SD card..........................0.00B
那么,为什么我看到我的应用程序大小有这么大的增加,可以最小化吗? 而且,我在我的项目中使用了4个库(JAR),它们位于
Android私有库中
,但这些库的副本也位于该文件夹之外
删除它们是否更安全,&删除它们有助于减少apk大小?
我还访问了许多描述Proguard
功能的网页,我真正了解了Proguard是如何减少apk的大小的,它通过删除未使用的代码和使用语义模糊的名称重命名类、字段和方法来缩小、优化和模糊我们的代码。结果是一个较小的.apk文件,更难进行反向工程。但是我不知道我的proguard project.txt
应该是什么样子?我在我的应用程序中使用了4个库,即
easyFaceBookandroiddk_2.3.jar
,android-support-v7-appcompat.jar
,google play services.jar
&android-support-v4.jar
目前我的proguard properties.txt
看起来像这样&而且它不使用WebView
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keep class com.facebook.** { *; }
-keepattributes Signature
那么,我应该在我的proguard properties.txt
中添加哪些行,以便它可以删除未使用的引用、类等,以减少apk大小?
使用AndroidUnusedResources.jar可以在android项目中查找未使用的资源
我认为这是proguard已经做过的事情?还是应该在启用proguard后使用它?
你也可以在你的回答中提到任何你认为应该分享的遗漏提前感谢…那么,为什么我看到我的应用程序大小增加了这么多,可以最小化吗? 几乎完全是因为你的res文件夹图像!在drawable mdpi、-hdpi、xhdpi文件夹中,每个图像应该有大约4个副本。唯一的区别是U的尺寸都不一样 删除它们是否更安全&删除它们有助于减少apk大小? 这些jar文件可能没有多个副本!只需一份带有链接的副本 前卫 是的,你说的Proguard是对的。但是,请注意,这里谈论的是文本文件。它们真的很小。我的意思是非常小的大小(千字节)。您的问题是兆字节(MB)大小。这就是图像 重复。这就是图像强> 启用proguard将节省一点空间 你也可以在回答中提到你认为应该分享的任何遗漏? 是的,对你来说,这些都更重要。请阅读并应用这些。祝你好运 如果用户发现你的应用很有用,那么他们不会卸载它;但是,您可以做几件事
- 您能否将图像移动到web上并
将其移动到您的应用程序中李>异步
- 确保您的文件尽可能被完全压缩。使用或
- 检查图像中是否有重复的。您可能可以使用9-patch进行此操作
- 您可以为某些图像制作自己的绘图工具
- 允许用户将数据移动到SD卡
- [编辑]应用程序在Play Store中运行一段时间后,请检查开发者控制台,查看使用最少的屏幕大小/密度从应用程序中删除该可绘制文件夹这可以大大减小尺寸!但是,请查看我下面的编辑,了解这种方法的缺点
- [编辑2]在Windows资源管理器中,检查整个res文件夹的文件夹大小,以及整个java文件夹的。如果您的java文件夹的大小很小,那么您减少APK大小的所有努力都应该是我上面所说的
public class CustomClass {
private String variable; // List of variables
public CustomClass() { ... } // List of constructors
public getVariable() { ... } // List of Assessors
public setVariable(String val) { ... } // List of Mutators
private String helperMethods() { ... } // List of helper and other methods
}
public CustomClass {
// Everything is removed!! No libraries used, nothing. Unless certain classes
// require some methods like Activity. Those methods should be empty though!
}
...
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
...
}
...
buildTypes {
debug {
...
}
release {
...
ndk {
abiFilters "arm64-v8a", "armeabi-v7a", "x86"
}
}
}