当前位置: 首页 > 知识库问答 >
问题:

缩小android应用程序(apk)的大小

袁青青
2023-03-14

我现在将在Google play Store上发布我的第一个应用程序。我已经压缩了应用程序中使用的图像。我有一些关于应用程序大小的问题。

如果应用程序的大小小于2 MB那么用户卸载应用程序的机会就会减少,我的这句话对于属于教育领域的应用程序是真的吗?

然而,当我在windows中看到我的apk文件时,它显示为3.10MB,但当它安装到设备中时,从应用程序信息中查看时,它显示:

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 Private libraries中,但是这些库的副本也在这个文件夹之外。

删除它们是否更安全?删除它们可以帮助减小apk大小?

我还访问了许多描述Proguard功能的网页,我真正理解了Proguard是如何减小apk的大小的,它通过删除未使用的代码和用语义模糊的名称重命名类、字段和方法来收缩、优化和混淆我们的代码。结果是一个更小的.apk文件,更难进行反向工程。但我不知道我的proguard-project.txt应该是什么样子的?
我在我的应用程序中使用了4个库,即EasyFacebookAndroidSDK2.3.jarAndroid-Support-v7-AppCompat.jarGoogle-Play-Services.jarAndroid-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大小?

我想这也是普罗冈已经做过的事?还是应该在启用proguard后也使用它?

此外,你可以在回答中提到你觉得应该分享的任何缺失的内容。
提前表示感谢...

共有1个答案

钱季
2023-03-14

几乎完全是因为您的res文件夹图像!在可绘制的-mdpi、-hdpi、xhdpi文件夹中,每个图像应该有大约4个副本。唯一的区别是他们都是不同的大小。

这些jar文件可能没有多个副本!只有一个副本与链接到它!

是的,你说的关于普罗冈的事是对的。但是,要意识到您在这里谈论的是文本文件。它们真的很小。我的意思是非常小的尺寸(千字节)。您的问题是MB大小的东西。那是图像!!!!

启用proguard将在大小方面节省一点。

是的,这些对你来说都更重要。请阅读并应用这些。祝你好运!

如果一个用户发现你的应用程序很有帮助,那么他们就不会卸载它;但是,您可以做几件事

>

  • 您能将图像移动到web上,并将它们async移动到您的应用程序中吗?
  • 确保您的文件尽可能完全压缩。使用pngquant或TINYPNG。
  • 检查图像中是否有重复。您可能可以为此使用9补丁程序。
  • 您可能可以为某些图像制作自己的抽屉。
  • 允许用户将数据移动到SD卡。

    1. 完成推荐的修复后,将APK释放到Google Play商店
    2. 过了一段时间后--一周、一个月等--您可以在Google Play Developer Console中检查应用程序的状态。
    3. 查找使用最少的屏幕大小桶(drawable-mdpi,-hdpi,-xhdpi,-xxhdpi)!您可以从应用程序中完全删除这些存储桶!

    这是因为图片比文本文件占用更多的字节。所有这些抽屉里都有相同的图像(只是不同的尺寸)。从较少使用的桶中删除图像可以节省很多空间!!

    请注意,从您的应用程序中删除那些桶将意味着您的应用程序将不得不在那些使用删除的桶的手机上做更多的工作。对于这些用户来说,应用程序可能会慢一些;不过,app大小可以缩小得更多。

    • java文件夹
    • res文件夹

    在您的示例中,您将看到java文件夹的大小可能真的很小(10到几百KBs);但是,您会看到res文件夹的大小确实很大(几MB!)。

    这意味着任何压缩,或减少您的代码库将是非常小的,不值得!!

    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!
    
    }
    

    现在编译并构建您的项目。

    检查当前APK的新APK大小。

      null
      null

  •  类似资料:
    • 我对飞舞和飞镖语言还不熟悉。在开发了一些示例应用程序后,我从教程中了解到,简单的Tab Layout应用程序在发布后需要7MB用于APK,安装后的应用程序大小为27MB。我的问题如下: APK大小和已安装APP大小有什么区别? 当开发一个应用程序时,无论是本机还是Flutter,我们应该记住APK大小不应该很大,或者安装后的应用程序大小不应该很大? 记住本机和Flutter的所有优点和缺点,开发A

    • 我刚开始使用JFace/SWT进行GUI编程。在我使用普通SWT窗口(http://help.eclipse.org/indigo/index.jsp?topic=%2forg.eclipse.wb.ercp.doc.user%2fhtml%2fwizards%2fercp%2fapplication_window.html)之前,我第一次尝试了JFace应用程序窗口。 现在我要设置这个窗口的最小

    • Android上的Flatter示例应用(发布版)是13MB的应用大小12MB的数据。为什么有12MB的数据?在iOS上,应用程序的大小甚至是47MB(我希望这是由于某种多架构的原因,但可能是最终大小)

    • 我想在应用程序运行时找到我的对象大小。我想用千分尺在Grafana中显示我的对象大小。 我的对象像人、学生、...... 我该怎么办? 对象大小像文件大小、对象体积

    • 我正在尝试用tkinter构建一个navigator应用程序,并且对于制作GUI和一般使用tkinter非常陌生。当整个窗口调整大小时,我似乎不知道如何很好地调整小部件的大小。当前调整大小的工作方式如下图所示。 顶部的描述是一个tkinter消息小部件,中间的导航树是一个检查表,两个按钮是常规按钮,按钮下面的文本是一个标签对象。我把这些放在tkinter根中。grid()方法,并根据需要使用ipa

    • 我已经做了一个颤振应用。发布的apk大约为14MB。我搜索了一些方法来缩小这个范围,并发现了以下内容:https://flutter.io/android-release/#enabling-前卫 但我的问题是,我怎样才能知道我在步骤1中使用的所有附加库?是否有任何命令可以了解它们,或者只是我添加到? 我需要如何在这个文件?