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

如何让 HelloWorld.apk 体积最小

作者头像
零式的天空
发布于 2022-03-28 12:20:18
发布于 2022-03-28 12:20:18
71100
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

按照最新 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
代码运行次数:0
运行
AI代码解释
复制
import android.support.v7.app.ActionBarActivity;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.app.Activity;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
R cannot be resolved to a variable

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
java.lang.NoClassDefFoundError: android.support.v4.app.Fragment
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何让 HelloWorld.apk 体积最小
按照最新 ADT 的默认设置(如下图所示)创建一个最简单的 HelloWorld 程序,会发现最后生成的 apk 文件大小就已经达到了惊人的 903KB。如果只是想做一个功能非常简单的 APP,体积也这么大的话那太让人沮丧了,那我们就来探索一下如何让这个 HelloWorld.apk 体积最小。
mzlogin
2020/04/16
1.2K0
如何让 HelloWorld.apk 体积最小
Android开发笔记(八十二)SDK版本兼容
Android控件很多属性都有默认值,比如文字默认黑色、编辑框默认透明背景等等,但因为android是开源的,各厂商都会自行修修补补,所以很多时候默认值并不靠谱。举例如下: 1、在某些低版本的Android上,如不指定文字颜色textColor,则默认的文字颜色是白色; 2、编辑框有的默认透明背景加一根底线,有的默认白色圆角背景; 3、主题Theme.Holo默认是浅灰背景,但有的品牌手机上改成了深灰背景; 4、调用View的getDrawingCache方法对指定控件截图,默认背景是黑色,而不是我们在UI上看到的透明背景,是不是很惊讶?所以截图前要先设置好背景色。 所以,为了让app在不同设备上都是一样的显示风格,就得自己设置期望的各种属性值,另外也尽量不用系统自带的主题,如有可能自定义主题风格,这样即使设备厂商修改了默认属性值,app也仍然保持统一的风格。
aqi00
2019/01/18
1.1K0
Head First Android ActionBar
最近在Android Studio中新建项目时发现Activity还是和以前一样,默认继承自ActionBarActivity,但是ActionBarActivity 却被标示为已经过时的API!对于这个问题,StackOverflow上已经有人回答了,请看ActionBarActivity deprecated,然后你会发现自从Android的兼容支持库升级到21版本以后(appcompat-v7-r21.1.0),ActionBarActivity 被 AppCompatActivity 取代了!还有一个变化是建议使用Toolbar,而不要使用原来的ActionBar 了!所以,这两节的内容我打算总结下ActionBar和Toolbar的基本使用,因为Toolbar实际上是ActionBar的扩展,所以这一节还是介绍复杂的ActionBar,下一节再继续介绍Toolbar。
宅男潇涧
2018/08/01
7680
Head First Android ActionBar
安卓基础(十五)[通俗易懂]
目标人群:没有基础的安卓刚開始学习的人 知识点:在Android Studio中使用support V7包来实现ActionBar的效果 目标:在页面上显示一个ActionBar
全栈程序员站长
2022/07/08
4760
Android开发笔记(一百一十九)工具栏ToolBar
在前面的博文《Android开发笔记(二十)顶部导航栏》中,我们学习了ActionBar的用法,可是ActionBar着实是不怎么好用,比如文字风格不能定制、图标不能定制,而且还存在低版本的兼容性问题,所以实际开发中大家还是不倾向使用ActionBar。为此,Android提供了加强版的工具栏控件即Toolbar,因为Toolbar继承自ViewGroup,而且可在布局文件中像其它布局视图一样使用,所以灵活性大大的提高了。既然Android都与时俱进了,那我们也不能落后,现在就来好好学学Toolbar的用法。
aqi00
2019/01/18
2K0
1.ActionBar
ActionBar 低版本和高版本用法不同 低版本: 1. 引用v7-appcompat 2. Activity继承ActionBarActivity 3. android:theme="@style/Theme.AppCompat.Light" > 高版本: 1. Activity自带actionBar 2.从Android3.0(APIlever11)开始,所有使用Theme.Holo主题(或者它的子类)的activity都包含了actionbar,当 targetSdkVersion或min
六月的雨
2018/05/14
9550
编译apk遇到的问题记录
其中,文件名.tar.gz是你要解压的.tar.gz文件的名称。解压命令选项的含义如下:
天天Lotay
2023/10/15
2300
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
报这个错的原因是activity继承了兼容包的类,比如ActionBarActivity,它来自android.support.v7.app.ActionBarActivity
再见孙悟空_
2023/02/10
6910
Android Support Library主要库详细介绍
  网上对Android Support Library中各个依赖包介绍的中文资料太少了,结合官方文档和有限的参考资料做了一次总结,有描述得不对的地方还请指正。
open
2020/03/19
1.3K0
Android Support Library主要库详细介绍
Head First Android Toolbar
上一节我们介绍了ActionBar的使用,这一节我们介绍ActionBar 的替代者——Toolbar,看看它有多大的能耐!
宅男潇涧
2018/08/01
9230
Head First Android Toolbar
升级Android支持库版本遇到的两个问题
公司项目之前support Library 版本比较混乱,各moudle有好几个版本的v7包和v4包,而且版本还比较低,今天抽时间统一了下支持库以及buildToolsVersion等的版本,但是遇到了两个问题,记录一下。 1. 升级buildToolsVersion至26 最新的buildToolsVersion已经到26了,照之前方式,直接在build文件中将buildToolsVersion后的引用版本改为26.0.2,然后同步,发现编不过去,提示: [failed to find build too
coderZhen
2018/06/28
6690
unity3d与android交互:aar导出给unity:闪退,Theme.AppCompat.Light,appcompat-v7问题
这是因为sdk中用了这个主题,冒然的删除,会导致后面出来的功能有问题 使用appcompat-v7-23.0.0.aar解决,这个里面包含了资源,单纯的jar包不行
立羽
2023/08/24
3180
unity3d与android交互:aar导出给unity:闪退,Theme.AppCompat.Light,appcompat-v7问题
实现Android APK瘦身99.99%
让我们将这一原则应用到 Android App 开发中。我们将玩转一个称为“ApkGolf”的 APK,目的是创建一个尽可能具有最少字节数的 App,并可安装在运行 Oreo 的设备上。
Android技术干货分享
2019/06/13
1.9K0
android Material Design详解
前言 我们都知道Marterial Design是Google推出的全新UI设计规范,如果对其不太了解的可以看下:Material design非官方中文指导手册 ,或者我的前面几篇Material Design的译文,相比之前Google在Android Holo风格上平平淡淡的表现不同,Material Design现在是被Google所比较重视的。在推出这门全新设计语言后,Android上自家的应用很快就使用Material Design全新设计了,如Play商店,Google Map,Goog
xiangzhihong
2018/02/01
2K0
android Material Design详解
自定义ActionBar背景(分别针对3.0以下和3.0以上的版本)
官方原文:http://developer.android.com/training/basics/actionbar/styling.html 针对3.0以上的版本: <?xml version="
用户1737026
2018/05/17
6920
Android--Toolbar基本使用
1.App主题使用NoActionBar 2.Activity需要继承AppCompatActivity 3.在代码中调用setSupportActionBar方法替换Actionbar
aruba
2020/07/02
1.6K0
2.Android-sdk目录介绍、ADT使用介绍、创建helloworld 3.Android-ADT之helloworld项目结构介绍
Android软件开发工具包管理器,就像一个桥梁,连通本地和服务器,从服务器下载安卓开发所需工具到本地。
诺谦
2019/12/20
2K0
2.Android-sdk目录介绍、ADT使用介绍、创建helloworld

            3.Android-ADT之helloworld项目结构介绍
Android Support Library
用户1172465
2018/01/05
1.1K0
Android AppBar
AppBar官方文档摘记 2016-6-12 本文摘自Android官方文档,为方便自己及其他开发者朋友阅读。 章节目录为“Develop > Training > Best Practices f
用户1172465
2018/01/08
9880
Android AppBar
AndroidP升级之路
从2019年下半年,所有安卓外部应用市场强制要求应用升级到TargetVersion 28。斗破苍穹的升级过程需要分以下两步来做。
Cheney
2020/08/19
1.3K0
相关推荐
如何让 HelloWorld.apk 体积最小
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档