有時候通過安裝apk方式來運行此apk會遇到一些avc denied(比如,沒有system權限訪問不了system/lib64下的庫文件),需要將apk以及apk所需要的so文件拷貝到system/priv-app/路徑下,到時有時候沒有root權限,並不能往system/priv-app/路徑下創建文件,所以我們需要做如下操作:
- 在有root權限的機器上安裝apk
- adb root
- adb remount
- adb shell進入adb模式
- cd /data/app/apk包名-xxxxxxx
- 將上述base.apk和lib文件夾pull出來當一個文件夾中,並將base.apk重命名爲apk原先的名字
- 新建一個HelloWorld文件夾,並將上述所有so文件和HelloWorld.apk拷貝到HelloWorld文件夾中
- 將HelloWorld文件夾拷貝到Android源碼中的external/xxx/路徑下
- 在external/mobicore/HelloWorld/路徑下創建Android.mk,並添加如下內容(對於不同apk,只需要修改LOCAL_MODULE和LOCAL_PREDUILT_JNI_LIBS)
LOCAL_PATH := $(my-dir)
#apk file
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorld
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false
#LOCAL_MULTILIB := 32
#LOCAL_JNI_SHARED_LIBRARIES := libAndro7za libbase_module_dex libbitmaps libblur_armv7 libcmdsh libcommon_basemodule_jni libFdToFilePath libFileNDK libgif-jni libmemchunk libmttgpu_info libmttport_shared libmttwebview libmttwebview_plat_support libNativeRQD libqb_keystore libresapk libSharpPDecoder libtbs_sdk_extension_dex libtbs_shell_dex libtbsconf libTencentLocationSDK libtencentpos libvideo_impl_dex libwebp_base libwebview_dex libwebview_internal_service_dex
LOCAL_PREBUILT_JNI_LIBS := libHelloWorldJavaClient.so \
libTee.so \
libTeeClient.so \
libblur_armv7.so \
libTeeJni.so
PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES += $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
- 保存之後,build系統,之後可以看到out/target/product/${product_name}/system/priv-app/HelloWorld已經打包進來了
- 重刷system.img