2010-04-27 8 views
15

En Android documentation con respecto a la firma de código podemos leer: "Al firmar varias aplicaciones con el mismo certificado y usando comprobaciones de permisos basadas en firmas, sus aplicaciones pueden compartir código y datos de manera segura "Android: cómo compartir código entre proyectos firmados con el mismo certificado

¿Cómo se puede compartir exactamente el código? ¿Es posible liberar la aplicación principal y múltiples complementos intercambiables y luego descubrirlos en tiempo de ejecución? ¿A qué se parece el código fuente y cuáles son las ventajas sobre las llamadas a los intentos "estándar" desde/hacia diferentes paquetes APK?

Respuesta

9

Use Context.createPackageContext() para instanciar un paquete para otro archivo .apk que le interese. Si está firmado con el mismo certificado que el suyo, Y ambos usan el mismo ID de usuario compartido, entonces puede usar el para cargar su código en su proceso, lo que le permite obtener el ClassLoader del contexto y crear instancias de las clases que desee.

De lo contrario, si no están firmados de la misma manera y utilizan explícitamente el mismo ID compartido utilizado, solo puede cargar sus recursos.

Tenga en cuenta que una vez que la aplicación está en el mercado, no puede cambiar el ID de usuario compartido de una aplicación (a otra cosa o pasar de tener y no tener una ID de usuario compartida).

+0

Más información: http://developer.android.com/intl/de/guide/topics/security/security.html#userid y http://developer.android.com /intl/de/guide/topics/manifest/manifest-element.html – tomash

2

Supongamos que quiere llamar a una función pública de la clase cargada dinámicamente. Utilice el siguiente fragmento de código:

Context friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE); 
Class friendClass = friendContext.getClassLoader().loadClass("packageName.className"); 
Class noparams[] = {}; //say the function (functionName) required no inputs 
friendClass.getMethod("functionName", noparams).invoke(friendClass.newInstance(), null); 
Cuestiones relacionadas