一般而言,简单的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中。