odex抽取会导致增加内存,开机时间变短,公司公司的要求是增加内存可以接受.增加开始时间不能接受.
公司每次打包的时候都会遇到预制公司内部apk的时候,进行源码编译进行报错,导致编译失败的问题.
如果是预制纯正的第三方apk不能进行odex抽取,那只能进行在对应的Android.mk关闭odex抽取
LOCAL_DEX_PREOPT := false
要是预制的大部分是自己公司开发的APK还进行odex抽取就需要应用开发修改,那么公司想要知道在编译之前有那些apk可以进行抽取,公司内部的那些apk不能进行抽取.
可以避免因为预制APK而导致的错误,节省了人力物力和时间成本.
前期调研的时候发现odex抽取可以使用 dex2oat 工具进行抽离.但是odex 命令抽取,但是odex 命令太长,而且容易导致错误,最终抛弃,有兴趣的同学可以去看看Odex命令
第二种方式是相对好一点的方式,但是环境 依赖于源码
解决方式是在 jenkins 放一套编译好的源码 让应用同事上传apk到 jenkins 上面 每次进行检测 ,每个应用的检测时间应该是 30秒左右,这样大大降低了公司的人力财力和时间成本.并且每个应用在提供给系统编译之前先进行检测.
具体的jenkins 构建脚本编写如下:
#设置编译JDK环境
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
apk_name="MyOdexAPP"
#删除上次编译之后的文件夹
cd ${WORKSPACE}/source/packages/apps/
for file in $(ls)
do
if [ -d "$apk_name" ]
then rm -rf $apk_name
fi
done
cd ${WORKSPACE}/source/
#创建预制编译文件夹
app_file_path="packages/apps/${apk_name}"
mkdir -p "$app_file_path"
mv ../$apk_name\.apk "$app_file_path"
#创建Android.mk
app_mk_path="$app_file_path/Android.mk"
echo $app_mk_path
echo "LOCAL_PATH := \$(call my-dir)" >> "$app_mk_path"
echo "include \$(CLEAR_VARS)" >> "$app_mk_path"
echo "LOCAL_MODULE := ${apk_name}" >> "$app_mk_path"
echo "LOCAL_DEX_PREOPT := true" >> "$app_mk_path"
echo "LOCAL_MODULE_TAGS := optional" >> "$app_mk_path"
echo "LOCAL_SRC_FILES := ${apk_name}.apk" >> "$app_mk_path"
echo "LOCAL_MODULE_CLASS := APPS" >> "$app_mk_path"
echo "LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX)" >> "$app_mk_path"
echo "LOCAL_CERTIFICATE := platform" >> "$app_mk_path"
echo "include \$(BUILD_PREBUILT)" >> "$app_mk_path"
# mm命令实现快速编译
source build/envsetup.sh
lunch "31"
cd $app_file_path
mm
cd ${WORKSPACE}/source/out/target/product/msm8953_64/obj/APPS/
for file in $(ls)
do
if [ -d "${apk_name}_intermediates" ]
then rm -rf "${apk_name}_intermediates"
fi
done
cd ${WORKSPACE}
for file in $(ls)
do
if [ $apk_name = $file ]
then rm $apk_name
fi
done
来源:https://blog.csdn.net/ChaoLi_Chen/article/details/102754588