前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何让 HelloWorld.apk 体积最小

如何让 HelloWorld.apk 体积最小

作者头像
零式的天空
发布2022-03-28 20:20:18
5830
发布2022-03-28 20:20:18
举报
文章被收录于专栏:零域Blog零域Blog

按照最新 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 依赖库移除。

移除步骤如下:

从 HelloWorld 工程设置中移除库依赖

在如下对话框的 Library 部分选中 appcompat_v7,并点击 Remove。

解决由第 1 步操作带来的各种错误

错误提示

解决方案

代码语言:javascript
复制
import android.support.v7.app.ActionBarActivity;
代码语言:javascript
复制
import android.app.Activity;
代码语言:javascript
复制
R cannot be resolved to a variable

出现这个提示一般是 xml 文件里出错导致无法自动生成 R.java 文件,根据 Eclipse 在 Package Explorer 里提示的小红叉,逐一排查修改。

代码语言:javascript
复制
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
代码语言:javascript
复制
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
代码语言:javascript
复制
<style name="AppBaseTheme" parent="android:Theme.Light">

res/menu/main.xml 文件里提示

将该文件里的

删除。

此时编译生成的 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,右键删除之。)

影响

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

大小

可不可以只不导出 android-support-v4.jar 而继续依赖 appcompat_v7 呢?答案是不可以,在http://developer.android.com/tools/support-library/features.html#v7的 Note 中显示 v7 appcompat library 是依赖 v4 support library 的。

API

代码语言:javascript
复制
java.lang.NoClassDefFoundError: android.support.v4.app.Fragment
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 移除 appcompat_v7 依赖
  • 不导出 android-support-v4.jar
  • 影响
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档