Red de conocimientos turísticos - Información de alquiler - ¿Es posible modificar la hora del sistema Android a través del NDK?

¿Es posible modificar la hora del sistema Android a través del NDK?

La API de Android proporciona la función SystemClock.setCurrentTimeMillis() para modificar la hora del sistema, pero no importa cómo llames a esta función, es inútil, ya sea en el simulador o en una máquina real, siempre aparecerá "No se puede" en el. Controlador de alarma abierta logcat: "Permiso denegado" se muestra en Logcat. Esta característica requiere privilegios de root o ejecutarse en un proceso del sistema para funcionar.

Al principio pensé que no era posible cambiar la hora del sistema a nivel de aplicación, pero después de buscar en línea durante mucho tiempo, descubrí que aún se puede hacer.

El primer método es relativamente simple, pero debe compilarse usando make en el entorno de código fuente del sistema Android:

1. En el nodo de manifiesto AndroidManifest.xml de la aplicación, agregue el atributo

"android:sharedUserId=" android.uid.system".

2. Modifique el archivo Android.mk y agregue la línea 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 un poco problemático, pero puede usar make para compilar sin abrir el archivo. máquina virtual y ejecutarla en el entorno de origen:

1. Igual que arriba, agregue el atributo "android:sharedUserId="android.uid.system".

2. Utilice eclipse para compilar el archivo apk, pero el archivo apk no se puede ejecutar.

3. Abra el archivo apk con el software de compresión y elimine 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 busque el archivo clave en mi directorio de código fuente de Android, la ubicación es "build argetproductsecurity" y hay dos archivos platform.pk8 y platform.x509.pem.

Luego use la herramienta Signapk proporcionada por Android para firmar. El código fuente de signapk se encuentra en "build oolssignapk". El mejor nombre de archivo es Utilice una ruta absoluta para evitar que no se encuentre. También puede modificar el código fuente y utilizarlo directamente. De esta manera terminarás con la misma apk que en el primer método.

Finalmente, para explicar el principio, primero agregue el atributo android:sharedUserId="android.uid.system". Compartir ID de usuario permite configurar varios APK con el mismo ID de usuario para que se ejecuten en el mismo proceso. Por lo tanto, configurar el UID de un programa en android.uid.system significa permitir que el programa se ejecute en un proceso del sistema, dándole permiso para cambiar la hora del sistema.

Simplemente agregar el UID no es suficiente. Si instala el APK en este momento, encontrará que no se puede instalar y le indicará que la firma no coincide. El motivo es que la clave de plataforma del. Se requiere que el sistema de destino ejecute el programa en el proceso del sistema, es decir, el segundo método mencionado anteriormente, 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 un proceso del sistema. Agregar LOCAL_CERTIFICATE := plataforma en el primer método en realidad firma el apk con estas dos claves.

Hay otro problema, es decir, el programa generado de esta manera solo se puede usar en el sistema Android original o en un sistema autocompilado, porque dicho sistema solo puede obtener platform.pk8 y platform. archivos x509. 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.