关于Android|关于Android JAR包的优化问题

1、把jar包优化成odex包:
【关于Android|关于Android JAR包的优化问题】在编译脚本.mk里面定义"WITH_DEXPREOPT:=true"
这样做,系统在第一次起来的速度比较快。开启了pre-dexopt的系统,jar有依赖性的优化,所以每次修改了java代码,都必须把out目录下的.odex文件清空,然后重编镜像。
清空.odex文件可以进入out目录,执行:
find -name "*.odex" | xargs rm -f



2、遇到这样一个错误:

I/dalvikvm(621): DexOpt: Some deps went away
E/dalvikvm(621): /system/framework/android.policy.jar odex has stale dependencies
I/dalvikvm(621): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm(621): Unable to process classpath element '/system/framework/android.policy.jar'
I/dalvikvm(621): DexOpt: Some deps went away
E/dalvikvm(621): /system/framework/services.jar odex has stale dependencies
I/dalvikvm(621): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm(621): Unable to process classpath element '/system/framework/services.jar'
I/dalvikvm(621): DexOpt: Some deps went away
E/dalvikvm(621): /system/framework/apache-xml.jar odex has stale dependencies
I/dalvikvm(621): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm(621): Unable to process classpath element '/system/framework/apache-xml.jar'

原因是build/core/dex_preopt.mk里面的宏DEXPREOPT_BOOT_JARS和init.rc里面的宏BOOTCLASSPATH所赋值的包的位置不一样,把它们对应起来就解决了。如下:
build/core/dex_preopt.mk里面:
DEXPREOPT_BOOT_JARS := core:core-junit:bouncycastle:ext:framework:telephony-common:mms-common:android.policy:services:apache-xml

init.rc里面:
export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar




    推荐阅读