Android-импорт ресурсов из библиотечного проекта - PullRequest
16 голосов
/ 20 января 2011

возможно ли использовать ресурсы, такие как строки, которые определены в проектах библиотеки в проектах приложения?если да, то как?потому что я не могу разрешить строки, которые я хотел бы разрешить следующим образом:

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

дает мне это исключение

WARN / ResourceType (278): нет идентификатора пакета при получении значения для ресурсаномер 0x00000000 WARN / System.err (278): android.content.res.Resources $ NotFoundException: строковый идентификатор ресурса # 0x0

строка («образец»), которую я ищу, определенно находится в этом пакете, предоставленном вstrings.xml проекта библиотеки.я даже вижу это в R.java

Ответы [ 4 ]

14 голосов
/ 24 января 2011

Так выглядит

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

возвращает 0, что означает, что он не может найти указанный ресурс. Последующий вызов ressources.getIdentifer() вызывает исключение, поскольку 0 не является допустимым идентификатором ресурса.

Вот несколько отладочных / альтернативных идей:


  • Вы, наверное, уже делали это дюжину раз, но это не помешает упомянуть: сначала перепроверьте правописание всего:

    • правильное написание пакета (как в проекте библиотеки, так и в проекте клиента),
    • строка ресурса верна (проект библиотеки и проект клиента),
    • - правильное написание библиотеки в элементе uses-library AndroidManifest.xml,
    • и т.д.

  • Можете ли вы получить доступ к каким-либо ресурсам в этой библиотеке, или проблема связана с этим ресурсом (title), или это относится к этому типу ресурса (строки)? Можете ли вы получить доступ к ресурсам другой библиотеки?

  • Вы обращаетесь к библиотеке как файл jar? Вы можете использовать jar-код, но не можете получить доступ к ресурсам из jar-файла.

Android - можно ли создать собственную библиотеку для использования в нескольких приложениях?


  • Вы пробовали использовать альтернативный формат имени:

Код

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
}

  • Вы можете попробовать использовать отражение:

код

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, получение идентификатора ресурса из строки?

http://daniel -codes.blogspot.com / 2009/12 / динамически извлечения-ресурсы-in.html

3 голосов
/ 20 января 2011

В коде вашего проекта импортируйте класс R:

import com.application.libraryproject.R

Затем вы можете ссылаться на любую строку или другой XML-определенный ресурс, например так:

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

или аналогичный.

2 голосов
/ 11 ноября 2011

У меня была похожая проблема, и я решил ее с помощью метода getPackageName() в библиотеке проектов.

В вашем случае это должно быть:

String title = "sample";
int id = ressources.getIdentifier(title, "string", getPackageName());
0 голосов
/ 20 января 2011

Да, определите ресурсы в вашем библиотечном проекте как обычно. Затем ссылайтесь на них в проекте, импортирующем библиотеку, добавив класс R к имени пакета в AndroidManifest.xml библиотеки.

...