20210524 ---- AS firma el sistema de la aplicación y llama a la interfaz oculta del sistema
Solo aplicable al desarrollo a nivel de sistema, con código fuente del sistema y archivos de firma.
Ambiente local:
1. Entorno de compilación AOSP
2. ubuntu 16.04
1. AS firma el sistema de aplicaciones
1. Obtener el archivo de firma del sistema
Generalmente se encuentra en el directorio build/make/target/product/security.
a.testkey: APK normal, utilizado de forma predeterminada.
b. plataforma: proceso del sistema, el UID del proceso es android.uid.system.
c.compartido: el APK necesita compartir datos con el proceso de contactos y el UID del proceso es android.uid.shared. (ContactProvider/CallLogProvider/...)
d.media: este APK es parte del sistema de descarga/medios y el UID del proceso es android.media. (MTP/Proveedor de medios/...)
2. Generar plataforma.pem
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt
3. Generar plataforma.pk12
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pk12 -name dev
Enter Export Password: (输入密码,比如123456)
Verifying - Enter Export Password:(输入密码,比如123456)
4. Genere platform.keystore (se puede usar en eclipse, este paso se puede omitir)
keytool -importkeystore -deststorepass android -destkeypass 123456 -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 123456 -alias dev
5. Generar platform.jks (para AndroidStudio)
keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 123456
6. Importe la firma jks a AS y configúrela en el archivo gradle
A. Abra el archivo build.gradle de la aplicación.
b. Complete la información correspondiente
C. Generar automáticamente la configuración correspondiente en build.gradle
7. Modificar el uid de la aplicación
Agregue modificación de uid en el archivo AndroidManifest.xml de la aplicación
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication"
android:sharedUserId="android.uid.system">
En este punto, la configuración relacionada con la firma del sistema de la aplicación se completa y puede compilarla directamente.
2. Llame a la interfaz oculta del sistema.
En términos generales, en el lado de la aplicación, no se puede llamar a la interfaz oculta y se deben utilizar la reflexión y otros métodos.
Sin embargo, nuestra aplicación ha sido firmada como una plataforma apk, por lo que, naturalmente, tiene permiso para llamar a estas interfaces. Ahora hay otro problema: al escribir una aplicación del sistema por separado en AS, no se puede llamar a la interfaz oculta.
Por supuesto, también podemos poner el código de la aplicación en el código del sistema.
De lo que quiero hablar ahora es de otro método, que consiste en compilar directamente a través de AS sin incluirlo en el código del sistema.
1. Cree las clases que deben llamarse en la aplicación.
Si actualmente desea llamar a los métodos relevantes de PowerManager, simplemente cree la clase android.os.PowerManager directamente en la aplicación.
2. En la clase creada, declare el método, pero el cuerpo del método puede estar vacío.
Si necesita devolver un valor, simplemente devuelva cualquier valor
3. Llame a la interfaz correspondiente en la aplicación para compilar el pase.
De esta forma, todo el proceso de firma y compilación se completa en el AS de una vez.
adjunto:
Métodos comunes de firma del sistema
java -jar -Djava.library.path=$LIB_PATH signapk.jar plataforma.x509.pem plataforma.pk8 $apk $signed_apk
LIB_PATH: la ruta que contiene la biblioteca libconscrypt_openjdk_jni.so, generalmente en ./prebuilts/sdk/tools/linux/lib64
signapk.jar: normalmente se encuentra en ./prebuilts/sdk/tools/lib
platform.x509.pem / platform.pk8: build/make/target/product/security 下
$apk: ruta apk original
$signed_apk: nueva ruta apk
Referencia:
https://blog.csdn.net/YellowGreatSun/article/details/87896407