Cómo llamar a la API oculta de Android
1)
En circunstancias normales, es decir, sin usar @hide, todas las clases o métodos públicos se compilarán en el momento de la compilación y generarán un archivo jar llamado documento de biblioteca stub. Esta biblioteca auxiliar es en realidad una implementación vacía, pero contiene todos los métodos públicos. Entonces, con esta biblioteca auxiliar, los desarrolladores de aplicaciones pueden desarrollar en eclipse.
2)
Pero una vez que se agrega @hide, cualquier clase o método marcado con @hide se eliminará al compilar la biblioteca auxiliar. Por lo tanto, los desarrolladores de aplicaciones no pueden llamar a clases o métodos ocultos "directamente" desde la biblioteca auxiliar. Si fuerza a eclipse a llamar a una clase o método oculto, eclipse informará un error. Un ejemplo típico es android.jar en el SDK de Android, que es una biblioteca auxiliar que contiene API que se han eliminado; en la imagen de arriba, el método forceStopPackage() de ActivityManager no se encuentra en el SDK de Android.
2. ¿Se pueden llamar API ocultas?
1)
Entonces, ¿pueden los desarrolladores de aplicaciones utilizar estas API ocultas? La respuesta es sí. En el entorno de ejecución real, todas las API existen y están implementadas. Podemos pensar fácilmente en utilizar "reflexión". Si ya conocemos el nombre de la clase y el nombre del método de la clase de destino y la lista de parámetros, entonces incluso se puede llamar al método @hide mediante reflexión. Con respecto a la reflexión de Java, no la ampliaremos aquí. Los estudiantes que no estén muy familiarizados con ella deben hacer su propia investigación. A continuación se muestra un ejemplo de reflexión.
IActivitManageram = ActivityManagerNative.getDefault();
Método forceStopPackage = am.getClass().getDeclaredMethod(" forceStopPackage", String.classage.setAccessible(true); /p>
forceStopPackage.invoke(am, yourpkgname);
2)
La reflexión es algo bueno, pero es problemático escribir. Inicialmente, el código de llamada se realizaba en una línea, pero ahora requiere muchas líneas si se escribe en el emisor. De hecho, no hay nada más conveniente que esto. Arriba mencionamos que android.jar en el SDK de Android es una versión castrada. Si podemos generar una versión completa, este problema se resolverá. El método específico es compilar completamente todo el código fuente de Android ahora. En el directorio out/target/common/obj/JAVA_LIBRARIES/ puede extraer las bibliotecas auxiliares necesarias si es necesario. Tome el marco como ejemplo: configúrelo para copiar/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar al entorno de desarrollo de eclipse y monte la biblioteca de usuario.