將apk和所需庫文件編譯打包到system/priv-app路徑下

有時候通過安裝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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章