Recursos de importación android de proyecto de biblioteca

¿Es posible utilizar recursos como cadenas que se definen en proyectos de bibliotecas en los proyectos de aplicación? ¿si es así, cómo? Porque no puedo parecen resolver las cadenas que me gustaría resolver de la siguiente manera:

String title = "sample"; int id = ressources.getIdentifier(title, "string", "com.package"); 

Me da esta excepción

WARN / ResourceType (278): No identificador de paquete al obtener el valor para el número de recurso 0x00000000 WARN / System.err (278): android.content.res.Resources $ NotFoundException: String resource ID # 0x0

La cadena ("sample") que estoy buscando está definitivamente en este paquete proporcionado en strings.xml del proyecto de la biblioteca. Incluso puedo verlo en el R.java

Así que parece

Int id = recursos.getIdentifier (título, "cadena", "com.package");

Está devolviendo 0 , lo que significa que no puede encontrar el recurso especificado. La llamada posterior a ressources.getIdentifer() provoca la excepción, ya que 0 no es un id de recurso válido.

Aquí hay algunas ideas de depuración / alternativas:


  • Usted probablemente ya ha hecho esto una docena de veces, pero no duele mencionar: primero revise la ortografía de todo:

    • La ortografía del paquete es correcta (tanto en el proyecto de la biblioteca como en el proyecto del cliente)
    • Cadena de recursos es correcta (proyecto de biblioteca y proyecto de cliente),
    • Es la ortografía de la biblioteca correcta en el elemento uses-library AndroidManifest.xml ,
    • Etc.

  • ¿Puede acceder a cualquier recurso en esa biblioteca o es el problema específico de ese recurso ( title ) o es específico para ese tipo de recurso (cadenas)? ¿Puede acceder a los recursos de otra biblioteca?

  • ¿Está accediendo a la biblioteca como un archivo jar? Puede jar el código, pero no puede acceder a los recursos de un tarro.

Android – ¿Es posible crear una biblioteca personalizada para usarla en varias aplicaciones?


  • ¿Has probado el formato de nombre alternativo?

Código

 String fullyQualifiedResourceName = "com.package:string/sample"; int id = ressources.getIdentifier(title, null, null); if (id == 0) { Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed"; // graceful error handling code here } 

  • Usted podría intentar usar la reflexión:

Código

 final String resourceName= "sample"; final int id; try { final Class resourceType = com.package.R.string.class; final Field field = resourceType.getField(title); id = field.getInt(null); } catch (final Exception e) { Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed"; // graceful error handling code here } 

Android, obtener ID de recurso de cadena?

http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html

En el código del proyecto, importe la clase R:

import com.application.libraryproject.R

A continuación, puede hacer referencia a cualquier cadena u otro recurso definido por xml como este:

String mystring = getString(R.string.app_name);

o similar.

Tuve un problema similar y lo resolví con el método getPackageName() dentro de la Biblioteca de proyectos.

En su caso, debe ser:

 String title = "sample"; int id = ressources.getIdentifier(title, "string", getPackageName()); 

Sí, defina los recursos en su proyecto de biblioteca como normales. A continuación, haga referencia a ellos en el proyecto importando la biblioteca prefijando la clase R con el nombre del paquete en AndroidManifest.xml de la biblioteca.

  • Cómo eliminar la sombra de borde superior de ActionBar
  • Android hacer? Attr / selectableItemBackgroundBorderless ir más lejos?
  • Declaración de atributos elegibles en Android
  • Acceda a config.properties desde AndroidManifest.xml
  • ¿Cómo mostrar una barra de progreso cuando WebView carga una URL en Android?
  • No se puede iniciar la actividad ComponentInfo {com.example.countryselect / com.example.countryselect.OfferSelect}
  • Implementación de múltiples fragmentos en una sola actividad Dinámicamente
  • ¿Cómo agregar el borde coloreado en cardview?
  • Cómo usar onclicklistener para ver la cuadrícula
  • Xamarin.Android: ¿Cómo capturar eventos Button definidos en el atributo OnClick XML?
  • Uso de los colores para el nuevo tema de diseño de material en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.