网上有不少大神都有说到,不过对于初次接触的人还是略有些难懂,琢磨了一下,自己总结一下。
如果有新问题再更新。
一、对于第三方APK,没有源码
1、第一种方法
(1)源码编译后,注意是编译后,把apk拷贝到out\target\product\generic\system\app中——不同的产品可有不同,总之就是在out路径下了。
(2)有包含.so的APK还需要吧so文件弄出来,APK本身是压缩文件,取出来全部的so文件,拷贝进如out\target\product\generic\system\lib中——不同的产品可有路径不同。
(3)根据你自己的指令,再次编译生成img,或者说重新打包生成img,只要没有make clean就行。
这个方法在make clean 后,out不存在了,意味着拷贝的文件也不存在了,所以就需要重复再来一次。
2、第二种方法
(1)在源码路径下,比如device/samsung/xxxxx/下面,(路径不写了,免得误导),一般都会有device.mk,当然其他的也行,或者自己写一个更好,不过这样比较简单。在这里建立一个文件夹比如app,把APK还有so文件都拷贝进去。
(2)在mk文件里面找PRODUCT_COPY_FILES += \ 这样的东东,恩,看到了吧,这里就是拷贝额外的文件的。在里面加上自己想要打包进的APK,比如暴风
PRODUCT_COPY_FILES += \
device/samsung/xxx/apk/storm/storm_2.5.52.apk:system/app/storm_2.5.52.apk
恩别忘了还有so文件,这里单列一个,还有很多个哦
PRODUCT_COPY_FILES += \
device/samsung/xxx/apkstorm/libbaofengmediascan.so:system/lib/libbaofengmediascan.so
以上的mk文件是借用已有的文件,如果自己写一个,那么就更自由一些,APK放在哪里都不是问题。这里写的是懒人法。
这个方法克服了上面make clean的问题。不过如果是临时测试,用第一种更简单些。
二、有源码的APK
(1)首先把整个apk的源码包copy到\packages\apps,(包括Android.mk文件)要注意代码中的layout文件夹中的XML不能有中文字样,否则会提示编码errors,编译不能通过,可以用@string的方法解决,这本来就是代码规范。
(2)然后修改device.mk或者其他相关的文件,这个自己看看,找到PRODUCT_PACKAGES += \,然后照葫芦画瓢,自己加上自己的名字,注意要和app的mk文件定义的名字一样。同时,还要求模块的Android.mk中变量LOCAL_MODULE_TAGS值为optional。