减少Android应用程序(apk)的大小

Viv*_*rde 39 java android jar proguard apk

我现在将在Google Play商店发布我的第一个应用程序.我已经压缩了我的应用程序中使用的图像.我对应用程序的大小有一些疑问.

如果应用程序的大小小于2 MB,那么用户卸载应用程序的可能性就会降低,对于属于教育领域的应用程序,我的这种说法是否属实?

但是,当我在Windows中看到我的apk文件时,它显示3.10 MB但是当它从设备中安装时从应用信息中显示它显示:

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
Run Code Online (Sandbox Code Playgroud)

那么,为什么我看到我的应用程序大小增加了很多,它可以最小化吗?

而且,我在我的项目中使用了4个库(jars)Android Private Libraries,但是这些库也在这个文件夹之外.

删除它们是否更安全,删除它们有助于减少apk大小?

此外,我访问了许多网页,描述了什么Proguard,我真正理解Proguard如何减小apk的大小,它通过删除未使用的代码并使用语义模糊的名称重命名类,字段和方法来缩小,优化和混淆我们的代码.结果是较小的.apk文件,更难以进行逆向工程.但我不知道proguard-project.txt 应该怎么样?
我使用4个图书馆在我的应用程序,即easyfacebookandroidsdk_2.3.jar,android-support-v7-appcompat.jar,google-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
Run Code Online (Sandbox Code Playgroud)

那么,我应该添加哪些行proguard-properties.txt以便它可以删除未使用的引用,类等,以减少apk大小?

利用现有AndroidUnusedResources.jar在https://code.google.com/p/android-unused-resources/ 在Android项目中发现未使用的资源.

我认为这与proguard已经做过的事情是一样的吗?或者是否应该在启用proguard后使用?

此外,您可以在答案中提及您认为应该分享的任何遗漏.
提前致谢...

Chr*_*ski 43

那么,为什么我看到我的应用程序大小增加了很多,它可以最小化吗?

几乎完全是因为你的res文件夹图像!您应该在drawable-mdpi,-hdpi,xhdpi文件夹中拥有大约4个每个图像的副本.唯一的区别是theu都是不同的大小.

删除它们是否更安全,删除它们有助于减少apk大小?

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

Proguard的

是的,你说的是关于Proguard的.但是,要意识到你在这里谈论文本文件.他们真的很小.我的意思是真的很小(千字节).您的问题是兆字节(MB)大小的问题.那是图片!!!!

重复.那是图片!!!!

启用proguard将节省一点点大小.

您还可以在答案中提及您认为应该分享的任何遗漏内容吗?

是的,这些在您的情况下更重要.请阅读并应用这些.祝好运!

如果用户发现您的应用有用,那么他们就不会将其卸载; 但是,你可以做几件事

  • 您可以将图像移动到网络上并将async它们移动到您的应用中吗?
  • 确保您的文件尽可能完全压缩.使用pngquanttinypng.
  • 检查图像中是否有重复.您可能可以使用9补丁.
  • 您可以为某些图像制作自己的绘图.
  • 允许用户将数据移动到SD卡.

  • [编辑]应用程序进入Play商店一段时间后,请检查开发者控制台,查看最少使用的屏幕尺寸/密度. 从您的应用程序中删除该drawable文件夹!这可以减少大小的数量!但是,请查看我的编辑,了解这种方法的缺点!!

  • [编辑2] 在Windows资源管理器中,检查整个res文件夹和整个java文件夹文件夹大小.如果你的java文件夹的大小很小,那么减少APK大小的所有effor应该是我在上面说的.

您可能想要显示一些图像,因为这样我们就可以看到您正在处理的内容

编辑

@AshwinñBhanushali具有强大的答案这里的问题,我没有回答的一部分,但他基本上是告诉你,没有什么,你可以真正做到除了我说的话,加上一个想法或2级以上.

我确实有另一个想法是基于他的一个想法会更好,因为Android Studio不再包含项目中的drawable-ldpi文件夹了.因此,只有使用Eclipse,我的扩展才会有所帮助

  1. 在进行推荐修复后,将APK发布到Google Play商店
  2. 经过一段时间 - 一周,一个月等 - 您可以Google Play开发者控制台中查看应用程序的统计信息.
  3. 寻找最少使用的屏幕尺寸桶(drawable-mdpi,-hdpi,-xhdpi,-xxhdpi)!你可以从你的应用程序中删除这些桶!

这是有效的,因为图片比文本文件占用更多的字节.所有这些绘图都有相同的图像(只是不同的大小).从较少使用的桶中删除图像可以节省大量空间!

请注意,从您的应用中删除这些存储桶意味着您的应用必须在使用已移除存储桶的手机上执行更多操作.这些用户的应用可能会变慢 ; 但是,应用程序的大小可以减少更多.

编辑2

文本文件几乎不占用任何内容.查看项目的文件系统!

在下图中.检查......的大小

  • Java的文件夹
  • 资源文件夹

在此输入图像描述

在您的情况下,您将看到java文件夹的大小可能非常小(10到几百KB); 但是,您会看到res文件夹的大小非常大(几MB!).

这意味着任何压缩或代码库中的减少都会非常小而且不值得!

因此,降低APK尺寸的最佳方法是按照我上面的说明操作!

编辑3

这是一个你可以马上做的测试,看看ProguardAndroidUnusedResources.jar等工具的绝对最大值(加上更多)会减小APK文件的大小!

您需要做的是从项目中删除除代表声明之外的所有代码.对抽象类,接口,枚举等执行相同的操作......您的项目结构应该保持不变,那么您根本不应该使用任何外部库.

  1. 所以你的所有课程都会有这样的东西......

    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
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你应该删除类,接口,枚举等内的所有代码,如下所示; 但是,请保留所有图像!...

    public CustomClass {
    
        // Everything is removed!! No libraries used, nothing. Unless certain classes 
        //     require some methods like Activity. Those methods should be empty though!
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在编译并构建您的项目.

  4. 检查新APK大小到您当前的APK.

    • 这将是您可以使用代码实现的最小压缩大小文件.是的,你的程序不会做任何事情,但这是重点.你关心这里的尺寸,这只是一个考验.
  5. 在手机上安装应用,并根据您当前的应用尺寸检查新的应用尺寸

    • 这将是您可以使用代码实现的最小的未压缩大小文件.是的,你的程序什么都不做,这只是一个测试.

如果您注意到2个应用程序仍然大小相同,那么在Proguard和AndroidUnusedResources.jar上花费所有时间在此阶段毫无意义.这是一项测试,可以了解您将个人资源用于减少应用规模的位置.

  • 此外 - Eclipse通常会默认将android支持库添加到项目中.如果您未在代码中使用任何这些支持类,只需将此jar文件从项目中取出即可.它会将应用程序的占用空间减少600KB. (4认同)