Android O/P/Q 版本如何预装 APK

简介: Android O/P/Q 版本如何预装 APK

一.预置可卸载APK,恢复出厂设置以后不可以恢复,将apk预置到data/app目录下


android o 版本以后google 加入了patch,不允许预置apk到data/app目录下,


只允许使用 adb install 的方式来安装apk到data/app目录下,需要将其roll back 回以前的版本,


frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java


--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -11394,6 +11394,10 @@
                                     + " but expected at " + known.codePathString
                                     + "; ignoring.");
                         }
                    } /*else {
+                        throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,
+                                "Application package " + pkg.packageName
+                                + " not found; ignoring.");
                     }*/
                 }
             }

然后用下列方法可以完成预置:


(1)在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例


(2)将 Test.apk 放到 packages/apps/Test 下面


(3)在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
# LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

(4)打开文件 device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test


(5)重新 build 整个工程

注意:这个比不能卸载的多了一句

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)


二.预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复,将apk预置到 vendor/operator/app 目录下


如果apk是v1签名方式,按照如下方式预置:

(1)在 vendor\mediatek\proprietary\packages\3rd-party下面以需要预置的 APK 名字创建文件夹,以预置一个名为Wechat.apk为例


(2) 将Wechat.apk 放入vendor\mediatek\proprietary\packages\3rd-party\Wechat下面


(3)在vendor\mediatek\proprietary\packages\3rd-party\Wechat 下面创建文件 Android.mk,文件内容如下

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Wechat
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := Wechat.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_OWNER := mtk
include $(BUILD_PREBUILT)


(4)打开文件device\mediatek\common\device.mk

将 Wechat 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Wechat


(5)然后重新build整个工程


注意:需要确保MTK_CTA_SET宏是打开的,会定义属性值persist.vendor.pms_removable=1,


MTK_CTA_SET和这个属性值不是强相关的,可以分离,


然后在**/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt**


这个白名单文件中加入需要卸载的apk的包名


如果是apk是V2签名方式:


(1)在任意一个apk的目录下(Xunfei)的Android.mk的文件中添加如下内容:

$(shell mkdir $(TARGET_OUT)/vendor/operator/app/Facebook)
$(shell cp $(LOCAL_PATH)/Facebook.apk $(TARGET_OUT)/vendor/operator/app/Facebook)


(2)将该Facebook.apk放入任意一个apk目录中,比如放入Xunfei这个目录中


(3)打开文件device\mediatek\common\device.mk

将 Facebook 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Facebook


(4)然后重新build整个工程

注意:

(4.1)需要确保 MTK_CTA_SET 宏是打开的,会定义属性值 persist.vendor.pms_removable=1,


MTK_CTA_SET 和这个属性值不是强相关的,可以分离,


然后在/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt这个白名单文件中加入需要卸载的apk的包名


(4.2)这种方式预置facebook,facebook可以成功预置进手机,但是点击手机的时候会报出


avc:denied,selinux权限异常的情况,可以通过在相应的te文件中加入allow语句


三.预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复,将apk预置到 system/app 目录下


(1) 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例


(2) 将 Test.apk 放到 packages/apps/Test 下面


(3) 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

(4) 打开文件 device\mediatek\common\device.mk

将 Test 添加到 PRODUCT_PACKAGES 里面。

PRODUCT_PACKAGES += Test


(5) 重新 build 整个工程


注意:

(1)需要确保 MTK_CTA_SET 宏是打开的,会定义属性值 persist.vendor.pms_removable=1,


MTK_CTA_SET和这个属性值不是强相关的,可以分离,然后在


/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_system_list.txt这个白名单文件中加入需要卸载的apk的包名


(2)修改如下代码:

8776    private PackageParser.Package addForInitLI(PackageParser.Package pkg,
8777            @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime,
8778            @Nullable UserHandle user)
8779                    throws PackageManagerException {
8780        final boolean scanSystemPartition = ((parseFlags & PackageParser.PARSE_IS_SYSTEM_DIR) != 0)
8781                // M:operator app also is removable and not system flag
8782                || sPmsExt.isRemovableSysApp(pkg.packageName) && pkg.codePath.contains("/system/") ;


目录
相关文章
|
2月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
5月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
183 1
|
5月前
|
Java Android开发 Windows
使用keytool查看Android APK签名
本文介绍了如何使用Windows命令行工具和keytool查看APK的签名信息,并提供了使用AOSP环境中的signapk.jar工具对APK进行系统签名的方法。
437 0
使用keytool查看Android APK签名
|
5月前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
386 2
|
5月前
|
Android开发
将AAB(Android App Bundle)转换为APK
将AAB(Android App Bundle)转换为APK
310 1
|
5月前
|
Android开发 开发者
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
362 1
|
5月前
|
IDE API 开发工具
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
537 0
|
6月前
|
Android开发
Android使用DrawerLayout仿qq6.6版本侧滑效果
Android使用DrawerLayout仿qq6.6版本侧滑效果
45 0
|
6月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
160 0
|
8月前
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】