专栏首页闷骚的程序员如何让 HelloWorld.apk 体积最小

如何让 HelloWorld.apk 体积最小

按照最新 ADT 的默认设置(如下图所示)创建一个最简单的 HelloWorld 程序,会发现最后生成的 apk 文件大小就已经达到了惊人的 903KB。如果只是想做一个功能非常简单的 APP,体积也这么大的话那太让人沮丧了,那我们就来探索一下如何让这个 HelloWorld.apk 体积最小。

(注:本文所述方法是以牺牲新的 API 为代价的。)

默认生成的 apk 文件大小(903KB):

移除 appcompat_v7 依赖

创建一个 Minimum Required SDK 低于 API level 11(对应 Android 3.0),Target SDK 高于 API Level 11 的工程,ADT 会自动生成一个名为 appcompat_v7 的库工程并且使你的工程依赖于它。关于 appcompat_v7 的作用,可以参见http://developer.android.com/tools/support-library/features.html#v7,大概就是说有一系列的 v7 xxx 库,比如 v7 appcompat library、v7 cardview library、v7 gridlayout library 等,都是用于为 Android 2.1(API level 7)或者更高的系统提供一些功能,其中 v7 appcompat library 是提供 Action Bar 相关的界面风格的支持,比如它里面包含了 ActionBar、ActionBarActivity 和 ShareActionProvider 等关键类。

所以如果纯出于精简 apk 体积的考虑,那就可以将 appcompat_v7 依赖库移除。

移除步骤如下:

  1. 从 HelloWorld 工程设置中移除库依赖 右键 HelloWorld 工程 –> Properties –> Android 在如下对话框的 Library 部分选中 appcompat_v7,并点击 Remove。
  1. 解决由第 1 步操作带来的各种错误 做完第 1 步以后,Eclipse 会报各种错,根据提示逐一解决即可。 错误提示 ActionBarActivity cannot be resolved to a type 解决方案 默认生成的 MainActivity 继承自 ActionBarActivity,将其改为 Activity,并将 import android.support.v7.app.ActionBarActivity; 移除,添加 import android.app.Activity; 错误提示 R cannot be resolved to a variable 解决方案 出现这个提示一般是 xml 文件里出错导致无法自动生成 R.java 文件,根据 Eclipse 在 Package Explorer 里提示的小红叉,逐一排查修改。 res/values/style.xml 文件里提示 error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'. 将 <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 改为 <style name="AppBaseTheme" parent="android:Theme.Light"> 同理,将 res/values-v11/style.xml 和 res/values-v14/style.xml 里的AppBaseTheme分别改为android:Theme.Holo.Lightandroid:Theme.Holo.Light.DarkActionBar。 res/menu/main.xml 文件里提示 error: No resource identifier found for attribute 'showAsAction' in package 'org.mazhuang.android.helloworld' 将该文件里的 app:showAsAction="never" 删除。 至此,工程应该能重新编译过了。

此时编译生成的 apk 文件大小(380KB):

不导出 android-support-v4.jar

相对一个 HelloWorld 程序而言,380KB 仍然是太大了。

在 Package Explorer 里能看到 Android Private Libraries 里有一个 android-support-v4.jar。这是一个庞大的包,关于它的作用可以参考http://developer.android.com/tools/support-library/features.html#v4。它提供了能用于 Android 1.6(API level 4)及以上系统的许多功能集,比如界面、数据处理和网络连接等。做一个复杂程序的时候它会很有用,但是如果只是一个非常简单功能的 apk,而且暂时并未用到里面的 API,可以不将其打包进 apk 以精简大小,有需要的时候再将其加进来。

不导出方法:

右键 HelloWorld 工程 –> Properties –> Java Build Path –> Order and Export

取消 Android Private Libraries 前面的勾。

然后 Clean 和 Refresh 工程,再看生成的 HelloWorld.apk 的大小(45KB):

这个大小大致可以接受啦!

(注:如果关闭 workspace 后重新打开,这个取消导出会重新被勾选中,如果确定使用不导出方案,那么可在 Package Explorer 视图中该工程下 libs 里找到 android-support-v4.jar,右键删除之。)

影响

当然程序精简带来的影响也是很明显的。

  1. 大小 原始 移除 appcompat_v7 移除 android-support-v4.jar 903KB 380KB 45KB 可不可以只不导出 android-support-v4.jar 而继续依赖 appcompat_v7 呢?答案是不可以,在http://developer.android.com/tools/support-library/features.html#v7的 Note 中显示 v7 appcompat library 是依赖 v4 support library 的。
  2. API 有大量实用的 API 用不了了,比如非常重要的 Fragment,要么将 minSdkVersion 改为 API level 11 以上使用android.app.Fragment,要么需要依赖 android-support-v4.jar 使用android.support.v4.app.Fragment。如果只使用android.support.v4.app.Fragment而不 Export android-support-v4.jar,那么程序在手机上将崩溃,提示 java.lang.NoClassDefFoundError: android.support.v4.app.Fragment

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式学习之单件模式

    如下内容是学习《Head First 设计模式》第五部分《单件模式》所得,主要就是一些原文摘抄和少量自己的总结。

    mzlogin
  • Windows 实现单实例进程的两种方法

    此方法参见《Windows 核心编程》第 5 版 17.1.2 章节《在同一个可执行文件或 DLL 的多个实例间共享静态数据》。

    mzlogin
  • Android 系统缓存扫描与清理方法分析

    本文讲述内容的完整代码实例见 https://github.com/mzlogin/CleanExpert。

    mzlogin
  • 黑客来袭!手把手带你深挖区块链安全漏洞

    以下为吴家志在CSDN主办,区块链大本营、柏链道捷、极客帮创投协办的「第 9 期 CSDN 区块链技术沙龙」上的发言内容,区块链大本营在不改变原意的情况下作了精...

    区块链大本营
  • 美加州和德州警方正在测试能联网的智能枪械

    大数据文摘
  • Hyper-V性能加速之VMQ

    在介绍VMQ之前,我们先来看看在传统的物理服务器上,网卡是如何接收网络数据的。在多核CPU出现的时候,因为网卡不支持将网络流量中断到多个逻辑核而是中断到其中一个...

    盆盆
  • 纯干货:手把手教你用Python做数据可视化(附代码)

    导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一。可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转换,或者为建模提供一些想...

    华章科技
  • Linux 磁盘管理常用命令硬盘分区和格式化概述在VM虚拟机添加硬盘MBR分区

    JavaEdge
  • HDFS|基本概念和读写原理

    01 — HDFS设计目的 A distributed file system that provides high-throughput access to ...

    double
  • 京东Star和阿里星,揭示互联网企业对算法&机器学习岗的要求

    从2015年8月到2015年10月,花了3个月时间找工作,先后通过内推参加了美团、阿里蚂蚁金服、京东、腾讯、今日头条、Growing IO、微软这7个公司的面试...

    机器学习AI算法工程

扫码关注云+社区

领取腾讯云代金券