集成Apk到Android源码中编译

        一般而言,简单的app我们通过IDE make就可以生成apk文件,拿来使用。但是,有些情况会因为权限等问题,导致你的apk crash。比如:‘’java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS“ 。虽然我们在AndroidManifest.xml添加了相应权限,但是仍然会crash,原因是检测当前app不是system apps。所以我们就需要将我们的apk集成到源码里面去编译。(另一种方法:使用系统签名,这里暂不做介绍)

        集成方法简单归纳为3步:

             1>、集成IDE环境下的src/  res/  AndroidManifest.xml到源码目录结果packages/apps/××× 或者vendor/××× (xxx为新增的库,一般为app名称,专门用来存放app code及相关文件),修改AndroidManifest.xml文件,添加android:sharedUserId="android.uid.system“ 让程序运行在系统进程中。

             2>、添加Android.mk文件。

                      LOCAL_PATH :=$(call my-dir)
                      include $(CLEAR_VARS)
                      LOCAL_DEX_PREOPT := false
                      LOCAL_MODULE_TAGS :=optional
                      LOCAL_SRC_FILES :=$(call all-java-files-under, src)
                      LOCAL_PACKAGE_NAME := xxx
                      LOCAL_CERTIFICATE :=platform
                      include $(BUILD_PACKAGE)

                         只有使用  LOCAL_CERTIFICATE :=platform,上一步的 sharedUserId 才会生效。

              3>、device下添加产品。device/**/**/**/device.mk或者product.mk.具体因平台(qcom、mtk、intel等等)而异。    
                                #add xxx
                                 PRODUCT_PACKAGES += \
                                  xxx

       通过以上操作,集成操作基本完成。mmm即可。会在out的system/app下生成相应apk文件。

    

      备注:如果我们的apk包含三方库文件。比如通过jni调用的so库。同样把libs放置src/ res/同级目录,在Android.mk中添加

LOCAL_PREBUILT_JNI_LIBS:= \

        libs/x86/lib*****.so\
        libs/armeabi-v7a/lib****.so

即可。也可以直接push到system/lib中。



  

猜你喜欢

转载自blog.csdn.net/King0217/article/details/72916671
今日推荐