Android 系统如何预装第三方应用以及常见问题汇集

本文详细介绍了在Android系统中预装第三方应用的四种情况:有源码、无源码不可卸载、无源码可卸载的应用预装,以及Signature Scheme v2签名方式的APK预装问题。涉及Android.mk文件配置、shell命令使用、PackageManagerService.java的修改等关键步骤,并提供了验证APK签名类型的工具和方法。
摘要由CSDN通过智能技术生成

从事系统开发工作的朋友都知道,手机厂商因为各种原因会在系统中预装一些第三方应用来作为手机的卖点或者额外的收入,但是随着Android 系统日益强大和完善,对一些应用的安全性和稳定性的要求也越来越高。下面就对在预装三方apk的过程中遇到的一些问题做点总结,有错误或者没讲到的地方欢迎大家指正和提建议。

首先,我们先来了解下日常预装三方应用涉及到的安装路径,因预装的需求不同导致部分apk的预装路径也有所差别,主要有以下几个路径:
1.system/app/ :该目录下存放的是一些系统级的应用,该目录下的应用能获取到比较高的权限,应用不可卸载,如Phone、Contacts等

2.system/priv-app/ :该目录是从Android 4.4开始出现的目录,它存放的是一些系统核心应用,能获取到比system/app/下应用更高的权限,应用不可卸载,如:Setting、SystemUI等。

3.vendor/app/ :该目录存放制造商的一些应用,应用不可卸载。

4.data/app/ :该目录下存放的一些第三方应用,应用可卸载。

接下来,我们把预装应用总体分为四个部分:

一、预装有源码的应用

我们可以在package/app/下或者vendor下预装带有源码的应用,这里以vendor下预装为例:

(1).在vendor下新建preload文件夹,在preload下创建APK的文件夹,以DemoApp为例,将APK的Source code 拷贝至DemoApp下,删除/bin 和/gen目录。

(2).在DemoApp中创建Android.mk文件,并添加如下内容:


LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

 LOCAL_PACKAGE_NAME := DemoApp

LOCAL_MODULE_TAGS := optional

LOCAL_CERTIFICATE := platform

LOCAL_PRIVILEGED_MODULE := true

LOCAL_SRC_FILES := $(call all-subdir-java-files) 

include $(BUILD_PACKAGE)

(3).在device/制造商/项目名/项目名.mk文件中做如下配置

PRODUCT_PACKAGES += DemoApp

(4).重新编译整个工程

注:LOCAL_CERTIFICATE 表示apk的签名方式,有platform 和PRESIGNED,platform 表示apk使用系统签名,PRESIGNED表示使用apk原来的签名。LOCAL_PRIVILEGED_MODULE := true表示apk将预装到system/priv-app/下

二、预装无源码并且不可卸载的应用

(1).在vendor下新建preloadApk文件夹,以Demo.apk为例,将Demo.apk拷贝至preloadApk下.

(2).新建Android.mk文件,添加如下内容:


LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Demo
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED

# priv-app
LOCAL_PRIVILEGED_MODULE := true

include $(BUILD_PREBUILT)

(3).在device/制造商/项目名/项目名.mk文件中做如下配置

PRODUCT_PACKAGES += DemoApp

(4).重新编译整个工程

三、预装无源码并且可卸载的应用

将apk预装成可卸载的方法有很多种,这里介绍其中一种:

(1).在vendor下新建preloadApk文件夹,以Demo.apk为例,将Demo.apk拷贝至preloadApk下.

(2).新建Android.mk文件,添加如下内容:


LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Demo
$(shell mkdir -p $(TARGET_OUT)/preloadApp/$(LOCAL_MODULE))
$(shell cp $(
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值