Android系统移植与调试之安装apk时MTK命令和出现Failure [INSTALL_FAILED_DEXOPT]问题解决方法

命令格式:./maketek [option] [project] [action] [modules]


Option:


   -t ,-tee :输出log信息到当前终端


   -o , -opt=…… : 编译附加条件,一般使用-opt=TARGET_BUILD_VARIANT=user来编译用户板软件


   -h ,help : 打印帮助信息并退出


Project : 工程名,例如:basicom72_wet_jb3 


Action : 


n , new : 重新编译整个工程


c , clean:清理编译时copy的文件及log信息


r , remake:整个工程检查修改部分并编译


listp , listproject: 查看目前所有的project


codegen : 生成database


nandgen : 生成nand_device_list.h (仅限使用nand flash 时使用)


check-env : 检查编译环境是否OK


check-dep :检查功能依赖性


check-modem :检查modem


update-modem :更新最新的modem.img 到system.img


mm : 用来编译APK模块,如:./mk mm package/apps/deskclok


emigen : 生成flash相关文件(custom_emi.c/.h)


modules:


     编译模块:preloader , uboot ,kernel , android 


      简写:pl , ub , k , dr 


其他常用命令:


./mk $project new  首次编译需要写出工程名称,后续可以省略


./mk $project r(n) pl(/ub/k/dr)  remake or new 单个模块,如:./mk r ub 编译kernel时,需同时做打包到bootimage 操作,原因是kernel部分是最终打包到bootimage 里面,然后烧录进flash的


./mk bootimage/snod/systemimage   打包模块


./mk otapackage     编译制作SD卡系统升级包,生成的zip包在out/target/product/project/目录下


./mk banyan_addon    编译MTK sdk 包


模块修改及对应的编译命令:


修改DWS 后,首先gencode 或者通过命令./mk drvgen 使其生成相应的.h/.c文件,这个文件会被preloader uboot  kernel 调用,因此需要new preloader uboot kernel 而kernel 还需进一步./mk bootimage 打包


Preloader 快速编译:


  修改以下目录或文件需要 ./mk r(n) pl


    Mediatek/platform/$platform/preloader/…


Mediatek/custom/$platform/preloader/…


Mediatek/custom/common/preloader/…


Mediatek/custom/$project/preloader/…


Mediatek/custom/$project/common/下的头文件


Mediatek/custom/$project/kernel/dct/下的头文件(cust_kpd.h,cust_gpio_usage.h)


Uboot 快速编译:


修改以下文件或目录需要./mk r(n) ub 


    Bootable/bootloader/uboot/…


    Mediatek/platform/$platform/uboot/…


Mediatek/custom/$platform/ uboot /…


Mediatek/custom/common/ uboot /…


Mediatek/custom/$project/ uboot /…


Mediatek/custom/$project/common/下的头文件


Mediatek/custom/$project/kernel/dct/下的头文件(cust_kpd.h,cust_gpio_usage.h)


Mediatek/custom/common/kernel/lcm/inc/lcm_drv.h


Mediatek/custom/common/kernel/leds/inc/cust_leds.h


Kernel 快速编译:


   修改以下文件或者目录需要./mk r(n) k 然后执行./mk bootimage打包成boot.img


   Kernel/…


 Mediatek/platform/$platform/kernel/…


 Mediatek/source/kernel/…


 Mediatek/custom/$platform/kernel/,.,,


   Mediatek/custom/common/kernel/…


   Mediatek/custom/$project/kernel/…


   Mediatek/custom/$project/common/下的头文件


   Mediatek/custom/common/hal/下的头文件


   Mediatek/custom/$project/hal/下的头文件


./mk bootimage


   打包生成$PRODUCT_OUT/boot.img


   打包生成$PRODUCT_OUT/ramdisk.img


./mk recoveryimage


   根据依赖会先生成boot.img


   打包生成$PRODUCT_OUT/recovery.img


./mk snod/systemimage-nodeps


   打包生成$PRODUCT_OUT/system.img 但不检查任何依赖性


./mk systemimage


   打包生成$PRODUCT_OUT/system.img 检查任何依赖性


 ./mk cacheimage


   打包生成$PRODUCT_OUT/cache.img


 ./mk userdataimage


    打包生成$PRODUCT_OUT/userdata.img


 ./mk secroimage


    打包生成$PRODUCT_OUT/secro.img

 

 

在android4.0源码里面编译出来apk后,用adb install (或adb install -r 重装)安装时,报错[INSTALL_FAILED_DEXOPT]。

xu@xu-PC:~$ adb install workspace/out/target/product/generic/system/app/xxx.apk
2820 KB/s (225970 bytes in 0.078s)
    pkg: /data/local/tmp/xxx.apk
Failure [INSTALL_FAILED_DEXOPT]
或者

xu@xu-PC:~$ adb install -r workspace/out/target/product/generic/system/app/xxx.apk
2768 KB/s (225970 bytes in 0.079s)
    pkg: /data/local/tmp/xxx.apk
Failure [INSTALL_FAILED_DEXOPT]

这是因为在system\app下面的apk是经过优化的,而dex文件不会打包到apk中,dex文件会被优化后,生成odex文件

下面就是程序经编译之后,在workspace/out/target/product/generic/system/app/下生成的.odex和.apk两个文件

Install: out/target/product/generic/system/app/xxx.odex
Install: out/target/product/generic/system/app/xxx.apk

这样安装apk时,就会缺少dex文件,导致报错[INSTALL_FAILED_DEXOPT]。

-->解决办法:

找到未优化过的apk,即在out/target/product/generic/obj/APPS/下找到对应的工程

xu@xu-PC:~$ adb install workspace/out/target/product/generic/obj/APPS/xxx_intermediates/package.apk.unaligned
2400 KB/s (331697 bytes in 0.134s)
    pkg: /data/local/tmp/package.apk.unaligned
Success
xu@xu-PC:~$

如果已经安装了该程序,可以重装一下:

xu@xu-PC:~$ adb install -r workspace/out/target/product/generic/obj/APPS/xxx_intermediates/package.apk.unaligned
2873 KB/s (331689 bytes in 0.112s)
    pkg: /data/local/tmp/package.apk.unaligned
Success

你可能感兴趣的:(Android底层,MTK)