2011-03-30 11 views
7

Tengo una aplicación de Android que se publica en una versión 'gratuita' y 'profesional'. He creado mi proyecto con un proyecto de base 'biblioteca' que se hace referencia a las dos versiones, de modo que mi conjunto de paquetes tiene el siguiente aspecto:¿Cómo hacer referencia a los "activos" de Android en los paquetes?

  • com.example.myapp
  • com.example.myapp.free
  • com.example.myapp.pro

una de las clases de actividad en mi base de proyecto 'biblioteca' carga un archivo de ayuda en una vista Web: WebView.loadUrl ("file: /// android_asset/ayuda. html "). Esta clase se extiende tanto en las versiones 'gratis' como 'pro' (por razones que quedan fuera del alcance de esta pregunta), pero me gustaría que ambas versiones hagan referencia al mismo archivo HTML (es decir, el que está en el paquete principal). En mi configuración actual, sin embargo, el archivo HTML debe duplicarse en la carpeta 'assets' en los paquetes 'com.example.myapp.free' y 'com.example.myapp.pro' para el "archivo: ///android_asset/"URI para trabajar.

¿Hay alguna manera de especificar el URI "file: /// android_asset /" de modo que acceda al directorio 'assets' en el paquete principal?

Una solución parcial que encontré implica leer el archivo HTML del directorio 'raw' y luego presionar la cadena resultante en mi objeto WebView, pero esto sería complicado para algo más que una página HTML de solo texto (p. Ej. uno con imágenes, como el mío).

Saludos.

Respuesta

6

Desde Andrew White no explicó cómo hacer lo que se recomienda que no, te muestro:

Context otherContext = context.createPackageContext("other.package.name", 0); 
AssetManager am = otherContext.getAssets(); 

que no parece tan malo. Y he verificado que no hay necesidad de que los dos paquetes compartan una identificación de usuario.

+1

Creo que esto es incorrecto. Por favor, consulte (http://developer.android.com/guide/topics/security/security.html#userid). Su código implica que puede acceder a * cualquier * otros archivos de aplicaciones que serían un modelo de seguridad del SO particularmente débil. Lo he intentado y falla en el momento en que intento abrir un archivo. –

+0

Su enlace no menciona activos, que es de lo que se trataba la pregunta. ¿Intentó abrir un activo? En mi dispositivo, los archivos apk en/data/app (y, por lo tanto, los activos dentro de ellos) son legibles en todo el mundo. Obviamente, los directorios privados de aplicaciones en/data/data no lo son. Si esto es correcto, amablemente retracta tu voto negativo. – mhsmith

+0

supones que soy el votante de abajo ... –

1

Como desarrollador que tiene tanto versiones pro como gratuitas, puedo decir por experiencia, no intente compartir activos entre aplicaciones. Incluso si lo haces funcionar, terminarás con más problemas de los que vale.

Si tiene que hacerlo, cada aplicación debe compartir el mismo usuario del sistema y debe crear un contexto en una aplicación que imite a la otra. Estos no son difíciles de hacer, pero pueden ser una pesadilla de mantenimiento.

Cuestiones relacionadas