Colección de citas famosas - Consulta de diccionarios - ¿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. Desafortunadamente, no importa cómo llames a esta función, no importa el simulador o la máquina real, siempre la habrá. Puede ser un error en logcat. Aparece "No se puede abrir el controlador de alarma: Permiso denegado". Esta función requiere permisos de root o se está ejecutando en un proceso del sistema antes de poder usarse.

Al principio pensé que no había forma de cambiar la hora del sistema a nivel de aplicación. Más tarde, busqué en línea durante mucho tiempo y descubrí que este propósito aún se puede lograr.

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

1. Agréguelo al nodo de manifiesto en AndroidManifest.xml de. la aplicación

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 más problemático, pero no es necesario abrir un virtual. máquina y ejecútelo en el entorno del código fuente para compilarlo:

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. 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. Utilice la clave de plataforma del sistema de destino para volver a firmar el archivo apk. Este paso es más problemático.

Primero busque el archivo clave. La ubicación en mi directorio de código fuente de Android es "build argetproductsecurity".

Luego use la herramienta Signapk proporcionada por Android para firmar. El código fuente de signapk se encuentra en "build oolssignapk" y el uso es "signapk platform.x509.pem platform.pk8 input.apk output.apk. ", archivo Es mejor usar una ruta absoluta para el nombre para evitar que se encuentre. También puede modificar el código fuente y usarlo directamente. De esta forma, el apk final obtenido es el mismo que el del primer método.

Finalmente, para explicar el principio, primero agregue el atributo android:sharedUserId="android.uid.system". A través de la identificación de usuario compartida, se pueden configurar varios APK con la misma identificación de usuario para que se ejecuten en el mismo proceso. Luego configure el UID del programa en android.uid.system, es decir, deje que el programa se ejecute en el proceso del sistema, para que tenga permiso para modificar 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. Si desea ejecutarse en el proceso del sistema, también debe tener la clave de plataforma del sistema de destino, que es el segundo paso anterior. Los dos archivos platform.pk8 y platform.x509.pem mencionados en este método. Solo después de firmar con estas dos claves se puede realmente poner el apk en el proceso del sistema. Agregar LOCAL_CERTIFICATE := plataforma en el primer método en realidad usa estas dos claves para firmar.

También hay un problema, es decir, el programa generado de esta manera solo se puede usar en el sistema Android original o en un sistema compilado por usted mismo, porque solo dicho sistema puede obtener platform.pk8 y platform. .x509.pem dos archivos. Si es de otra empresa ni siquiera se puede instalar en Android. Intente firmar con la clave en el Android original. El programa se ejecuta correctamente en el emulador, pero cuando se instala en G3, aparece el mensaje "El paquete... no tiene firmas que coincidan con las del usuario compartido android.uid.system", que también lo es. el caso. La seguridad del sistema está protegida.