系统源码预制APK检测是否可以进行ODEX抽取

感情迁移 提交于 2019-12-02 11:07:51

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

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!