版权声明

凡未经作者授权,任何媒体、网站及个人不得转载、拷贝、重制、改动、展示或运用局部或全部的内容或服务。假如已转载,请自行删去。一同,我们保存进一步追查相关行为主体的法律责任的权利。

2023 小酥肉不加辣,All rights reserved.

如何将运用打包成系统运用,并装置到模拟器上

在车机运用的开发过程中,会调用系统权限的API,这就需求把运用打包成系统运用装置到模拟器。本文首要解说打包系统运用和装置的方法。

第一步 设置模拟器

创立虚拟器的时分,需求挑选不包括 Google APIs 的镜像。这是因为,假如运用带有 Google API 的镜像,我们将无法运用与 Google API 相同的密钥对我们的系统运用程序进行签名,因为我们无法得到它。而没有Google API 的纯 AOSP 镜像,我们可以获得 AOSP 的途径密钥,可以运用它对我们的系统运用程序进行签名。

第二步 修正 Manifest 文件

假如打算将你的运用程序作为系统进程运行,那么在 AndroidManifest.xml 中需求添加 android:sharedUserId 特点。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system"
    package="<YourPackageNameHere>">

添加此特点后,此运用程序只能作为系统运用程序装置。假如您检验将其装置为一般运用程序,将会失败。

第三步 运用 AOSP 系统签名

为了使运用程序成为系统运用程序,需求运用 AOSP 途径签名文件对其进行签名。

运用 Android SDK 中的 apksigner 东西对你的运用进行签名,运用下面这个指令:

apksigner sign --key platform.pk8 --cert platform.x509.pem <path of YourAPK>

其间 platform.pk8 和 platform.x509.pem 文件可以从 AOSP 的 target/product/security 目录中找到。

留心需求将 apksigner 加入到环境变量,它在 build-tools 这个文件夹下,以 33.0.0 版别的 build tools 为例,将其加入到环境变量中。

export PATH=$PATH:$ANDROID_HOME/build-tools/33.0.0

第四步 写入系统分区

为了使运用程序成为系统运用程序,需求将其装置在 /system/app/ 文件夹中。模拟器的系统分区是只读的,所以无法直接进行 adb push 。为了使系统分区可写,我们需求运用 -writable-system 标志重新启动模拟器。

emulator -avd <YourAVDNameHere> -writable-system

留心需求将 Android SDK 中的 emulator 添加到环境变量

export PATH=$PATH:$ANDROID_HOME/emulator/emulator

以可写系统形式重启模拟器后,运用以下代码段将你的运用布置到系统中

adb root
adb remount
adb shell mkdir /system/app/<YourAppFolder>
adb push <YourAPK> /system/app/<YourAppFolder>/
adb reboot

假如想卸载运用,将运用文件夹删去即可

adb root
adb remount  
adb shell rm -rf /system/app/ <YourAppFolder>
adb reboot

改善

每次需求装置系统运用时需求履行以上很多条指令,操作起来有些费事,即使你将它们写成bash脚本,每次也需求履行这个脚本。

那么有没有或许像开发一般的运用程序相同,只需求点击 Android Studio 中的 run 按钮就可以搞定呢?

答案是有的。可以运用 keytool-importkeypair 。这个东西可以将密钥/证书对导入到java keystore文件中,也就可以生成一般运用运用的签名文件。

用法:

keytool-importkeypair[-k keystore] [-p storepass] -pk8 pk8 -cert cert -alias key_alias

示例:

keytool-importkeypair -k ~/.android/platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

在你的项目的 gradle.build 文件中就可以直接设置运用生成的 platform.keystore 文件对运用进行签名。