Путь к активам библиотеки Android в Android?

Как я могу получить путь к активам библиотеки из основного приложения? Где в файловой системе хранятся активы?

В моем проекте Android Studio (1.1.0) у меня есть такие модули приложений и библиотек:

project
  - [lib]
      - src
          - main
              - assets   // <--
                  - hello.txt
              - java
              - jni      // native files
  - [app]
      - src
          - main
              - java

Я не смог получить доступ к активам, вызвав getFilesDir().getPath() + "hello.txt", который разрешается как-то вроде "/data/data/com.package.app/files/hello.txt"

Объединяет ли gradle ресурсы библиотеки и приложения автоматически? Нужно ли мне изменять build.gradle в моей библиотеке или приложении?

Причина, по которой мне нужен путь, заключается в том, что я могу получить доступ к активам из файла NDK.


person Ryan R    schedule 18.03.2015    source источник


Ответы (2)


Предполагая, что ваш код выполняется в действии или чем-то еще, что Context, чтобы получить входной поток для хранилища файлов в активах:

AssetManager am = getAssets(); // called from Context
String name = "hello.txt"; // relative path to a file in assets directory
InputStream is = am.open(name);

Подробнее об AssetManager Подробнее о делает то же самое в NDK

person Kirill K    schedule 18.03.2015

Как я могу получить путь к активам библиотеки из основного приложения?

Пути к активам нет.

Где в файловой системе хранятся активы?

Они не хранятся в файловой системе. Это записи в APK.

Причина, по которой мне нужен путь, заключается в том, что я могу получить доступ к активам из NDK.

Я не знаю, что код NDK имеет прямой доступ к ресурсам. Я предполагаю, что вам нужно будет каким-то другим способом передать эти данные в код NDK. В худшем случае вы можете передать InputStream, который вы получаете от AssetManager 9см. ответ Кирилла), в свой метод JNI, хотя я не знаю, насколько хорошо это работает.

person CommonsWare    schedule 18.03.2015
comment
о, я пропустил часть вопроса о NDK! Это уже на SO - person Kirill K; 19.03.2015
comment
@KirillK: О, круто, у них есть такая возможность. Спасибо, что указали на это! - person CommonsWare; 19.03.2015
comment
Спасибо. В моем случае активы из модуля библиотеки будут включены в APK? - person Ryan R; 19.03.2015
comment
@RyanR: Да, ресурсы из проектов/модулей библиотеки Android должны быть упакованы в APK. - person CommonsWare; 19.03.2015