作为一个刚入门不久的Android小白,成功安装Android Studio并生成第一个HelloWorld程序的心情自然是十分激动的。随着进一步的学习,我还学会了签名打包程序并且可以使程序安装在手机上。然而却惊奇的发现一个什么功能都没实现的HelloWorld居然需要1.4M!那么这个高中生做的不到900k的“一个木函”到底是怎么肥四?
说实话,这个问题纠结了我很长时间,查了很多资料也没能搞明白,只知道是support库的原因,但是删掉后却无法修复各种error,所以最终只能告一段落,继续看我的《第一行代码》。
前两天室友想让我帮他做个生成空间蓝字的软件,我最终做出来了,虽然能实现基本功能,但是安装包还是很大,遭到嫌弃。我也实在无法忍受一个简单的功能拥有这么大的体积,于是下定决心要把它做小。在查了无数资料,尝试无数次后,终于成功了!现在站在纯小白的角度上一步步解释,望大佬们轻喷。
首先新建一个HelloWorld项目:
如果你的项目不需要服务广大人民群众的话,那么API选择21就好了,待会会解释为什么:
然后让AS给我们自动创建一个空白活动:
点击Next出现如下界面:
两个选项默认都是打钩的。第一个没什么好说的,可是如果取消第二个选项,你会发现下面出现一行字:"If false,this activity base class will be Activity instead of AppCompatActivity",意思就是如果不打钩,activity_main就会继承自Activity类而不是AppCompatActivity。具体含义待会会解释,现在我们还是默认的让它选中吧。
然后点击Finish,这样一个HelloWorld项目就自动生成好了,在虚拟机上运行一下肯定是没有问题的,在这里就不演示了。然而如果现在就签名打包的话,生成的apk肯定是介个样子的:
1.40 MB!是不是很恶心?
那么现在开始,要把它精简成70K!
首先,点击File里面的Projec Structure:
先选择左边的app,再选择右边的Dependencies,也就是依赖库的意思:
前面说过,apk体积大的原因主要是AS生成项目的时候自动加入了v7 appcompat库。下面解释一下这玩意到底有什么用,Android的官方文档是这么说的:
什么是 Material Design?
顾名思义,可以把它理解成一种主题设计,通俗的讲就是有这玩意可以让你的应用看起来更加美观。“有媒体评论,Material Design的出现使得Android首次在UI方面超越了iOS”。
那么它是什么时候产生的?
是2014年在Google I/O大会上正式推出的,也就是Android 5.0发布的时间,距今只有三年。那是不是意味着Material Design只能在Android 5.0(API级别21)及以上版本才能够使用?Google当然不会让这种问题出现,所以它们推出了v7 appcompat库,目的是让5.0以下的版本也能够使用到Material Design。前面我们在建项目的时候说过如果不需要服务广大人民群众,我们选择API 21就足够了。根据8月份的Android市场占有率可以看到,5.0以上版本已经占到75%,而且比例正在增长:
安卓版本市占率(图片来源gsmarena)
个人感觉5.0是Android版本的一个重要分水岭,可能也是这个原因导致很多软件已经放弃了万年4.4及以下版本。
Material Design是5.0推出的,而我们的项目最小版本号就是5.0,所以根本没有使用v7 appcompat的必要,现在我们将把它删掉。选中appcompat-v7,点击右边的红色减号,把它删除,另外,com.android.support.constraint:constraint-layout是约束布局的库,通常情况下,我们是用不到的,这里也把它删掉:
最后别忘了点击OK!如果点完没反应的话,记得在Build选项里点击Clean Project:
然后就会在底下出现各种令人头大的Error信息:
首先找到styles.xml文件并打开:
发现有行错误:
可以看到正是因为删掉了AppCompat才导致错误产生,只要把这里的AppTheme的父主题parent改掉就可以了,输入@android:style/Theme就会跳出很多自带的可选择的主题(注意前面有个@,这很重要):
如果有兴趣的话可以把每种主题效果都试一下,这里我就选择了@androidid:style/Theme.Material,然后要把所有"item"标签里面的"name"都加上“android:”,就像这样:
的至于"style"更多用法以及每个"item"的具体含义,可以查阅Android官方文档样式和主题
接下来打开MainActivity.java,放张大图:
让MainActivity继承自Activity:
public class MainActivity extends Activity并删掉 " importandroid.support.v7.app.AppCompatActivity; "
如果你删掉了约束布局的库,那么在activity_main.xml中只要换成线性布局就可以了,如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="Hello World!" /> </LinearLayout>
这样一来,我们所有的改动就都完成了,然后Clean Project,发现已经没有任何错误了,然后运行一下试试看吧:
没有任何问题!只不过背景换成了黑色而已,如果想要变成白底黑字,只要在styles.xml加入两行:
<item name="android:backgroundTint">#ffffff</item> <item name="android:textColor">#000000</item>
就可以了,当然在colors.xml里面定义后再引用更好,这里就不再演示
最后让我们签名打包看看究竟有多大吧:
想必这些步骤你已经很熟悉了,不需要过多解释,但是最后一步我要强调一下。这里的Signature Versions有两个选项,后者是针对Android7.0的。我曾经只选择了V2版本,结果发现在5.0的手机上并不能安装,所以这里强烈建议把两个都选上!
然后Finish看下我们的成果吧:
成功缩小到了 72.8k,是不是很激动!反正我第一次成功时可是相当的激动!感觉自己和大佬们的距离终于缩小到太阳系了!!!
第一次写博客,如有错误,欢迎指正!QQ:1224500763,没有错误也欢迎加好友共同学习哦。。。。。。