Cómo obtener permisos del sistema para una aplicación y cómo firmar una apk con una clave de plataformaLa API de Android proporciona la función SystemClock.setCurrentTimeMillis() para cambiar la hora del sistema, pero no importa cómo llame a la función, no sirve, ni en el emulador ni en la máquina real, obtendrá "No se puede abrir el controlador de alarma: "Permiso denegado" en logcat. Permiso denegado". Esta característica requiere privilegios de root o ejecutarse en un proceso del sistema para funcionar. Originalmente pensé que no había forma de cambiar la hora del sistema a nivel de aplicación, pero después de buscar en línea durante mucho tiempo, descubrí que es posible. El primer método es relativamente simple, pero debe compilarse en el entorno de código fuente del sistema Android: 1. Agregue el atributo "android:sharedUserId="android.uid.system" al nodo de manifiesto del AndroidManifest.xml de la aplicación. 2 Modifique el archivo Android.mk y agregue LOCAL_CERTIFICATE: = plataforma 3. Utilice el comando mm para compilar y el apk generado tendrá permiso para modificar la hora del sistema. El segundo método es más problemático, pero no es necesario abrirlo. la máquina virtual para ejecutar. Utilice make en el entorno del código fuente. Simplemente compile: 1. Igual que arriba, agregue el atributo "android:sharedUserId="android.uid.system". 2. Utilice eclipse para compilar el archivo apk, pero este archivo apk no se puede utilizar. 3. Utilice un software de compresión para abrir el archivo apk y eliminar los archivos CERT.SF y CERT.RSA en el directorio META-INF. 4. Vuelva a firmar el archivo apk utilizando la clave de plataforma del sistema de destino. Este paso es un poco problemático. Primero, debe encontrar el archivo clave. La ubicación en mi directorio de código fuente de Android es "build argetproductsecurity". Hay dos archivos a continuación: platform.pk8 y platform.x509.pem. Luego use la herramienta Signapk proporcionada por Android para firmar. El código fuente de signapk es "signapk platform.x509.pem platform.pk8 input.apk output.apk" usado en "build oolssignapk". nombre del archivo para evitar Si no puede encontrarlo, también puede modificar el código fuente directamente. De esta forma, la apk final es la misma que la del primer método. Finalmente, para explicar el principio, primero agregue el atributo android:sharedUserId="android.uid.system". Con una ID de usuario compartida, puede configurar varios APK con la misma ID de usuario para que se ejecuten en el mismo proceso. Por lo tanto, si configura el UID del programa en android.uid.system, significa que desea que el programa se ejecute en el proceso del sistema, de modo que tenga permiso para cambiar la hora del sistema. Simplemente agregar el UID no es suficiente. Si instala el APK en este momento, no se instalará y le indicará que la firma no coincide. La razón es que se requiere la clave de plataforma del sistema de destino para ejecutar el programa. En el proceso del sistema, que es el segundo método mencionado anteriormente, hay dos archivos, platform.pk8 y platform.x509.pem. Solo después de firmar el apk con estas dos claves se puede colocar el apk en el proceso del sistema. Agregar LOCAL_CERTIFICATE := plataforma en el primer método en realidad firma el apk con estas dos claves. También hay un problema con esto, es decir, el programa generado solo se puede usar en el sistema Android original o en un sistema autocompilado, porque dicho sistema solo puede obtener dos archivos, platform.pk8 y platform.x509.pem. Ni siquiera puedes instalarlo en Android de otras empresas.
Después de probar la firma de clave original de Android, el programa se ejecuta normalmente en el emulador, pero cuando se coloca en G3, indica directamente "El paquete... no tiene firmas que coincidan con las del usuario compartido android.uid.system", lo que también protege el sistema. seguridad.