现在的位置: 首页 > 软件开发 > 正文

Android编译大小优化 APK编译大小优化

2013年06月22日 软件开发 ⁄ 共 1872字 暂无评论 ⁄ 被围观 1+

Android编译大小优化 APK编译大小优化,这个题目可能有点大,这是我在开发Android应用中遇到的困惑,也因此在网络上进行了各种搜索,却没能找到合适的答案。经过与各种Example Project的比较,摸索得到了一条优化体验,如下:

首先看臃肿APK与优化APK文件的内容比较:

APK内容差异-Android编译大小优化 APK编译大小优化

APK内容差异-Android编译大小优化 APK编译大小优化

从图中看到,左侧为优化文件,右侧为臃肿文件,2个文件的关键差异为classes.dex大小差异,再通过apktools解开将classes.dex反转为jar文件,打开看差异,如图:

classes.dex差异-Android小大优化APK大小差异

classes.dex差异-Android小大优化APK大小差异


再来看android包内容:
android包内容-Android大小优化 APK大小优化

android包内容-Android大小优化 APK大小优化

从上图可以看出,差异来自臃肿文件多了一个android.suport.v4包,为什么会编译生成这个包?为什么会有如此差异?原因在.classpath文件。

在Eclipse的工程中通常会自动生成一个.classpath文件,大致内容如下:

臃肿Android工程的.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>

大小优化的Android工程的.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>

通过比对得知,其差异仅在第6行的exported="true" ,这就是在生成APK的classes.dex文件中的android.support.v4文件。这个设置,其实来自Project的"Build Path",如图:

Build Path-Android大小优化 APK大小优化

Build Path-Android大小优化 APK大小优化

从以上种种,得出结论,要将编译结果最小化,只需在Build Path中不要勾选不需要导出的包即可,一般只需要勾选Android Dependencies即可。

给我留言

您必须 [ 登录 ] 才能发表留言!

×
#