2013-04-17 4 views
14

Я создаю проект библиотеки андроида, которому нужны некоторые статические ресурсы (изображения/xml и т. Д.) Внутри.Как получить доступ к ресурсам в проекте библиотеки андроида

Тогда мне интересно, где я могу разместить эти ресурсы и как получить к ним доступ?

Поскольку я поместил ресурсы в папку assets. И я использую AssetManager для доступа к ресурсам:

public class DataProvider { 
    byte[] getDrawableData(int num) { 
     AssetManager am = Resources.getSystem().getAssets(); 
     InputStream is = null; 
     try { 
      is = am.open("t.jpg"); 
     } catch (IOException e) { 
      return "".getBytes(); 
     } 
     if (is != null) { 
      Drawable dw = Drawable.createFromStream(is, null); 
      Bitmap bm = ((BitmapDrawable) dw).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      return stream.toByteArray(); 
     } 

     return "".getBytes(); 
    } 
} 

Однако я получил ошибку: W/System.err(19583): java.io.FileNotFoundException: t.jpg

В чем проблема?


Как Sankar V сказал, что проект библиотеки не поддерживает сырьевые активы. Тогда Кажется, что я должен положить resurces под папкой res.

Но я попытался использовать метод Resources.getSystem().getResources()...., который не может получить то, что я хочу. И люди говорили, что этот метод может получить ресурсы системного уровня, а не ресурсы уровня приложения.

Если это правда. Означает ли это, что я должен хранить ссылку на объект Context в любом месте, где захочу получить какие-либо ресурсы?

+0

Вы проверили связь, которую я предоставил в качестве решения. Это говорит: «Да, если вы знаете имя пакета вашей библиотеки», и есть рабочее решение. –

+0

Я прочитал сообщение. Но я не могу получить доступ к объекту 'context', поэтому я не могу вызвать' getResources() .... '. – hguser

+0

Я хотел бы подтвердить, где находится класс DataProvider? в проекте библиотеки или в проекте приложения –

ответ

7

Тогда я задаюсь вопросом, где я могу разместить эти ресурсы и как получить к ним доступ?

С Android Док

Проектов библиотеки не может включать в себя сырьевые активы

инструментов не поддерживают использование исходных файлов активы (сохраненное в активах/директории) в проекте библиотеки. Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets/application самого проекта приложения. Однако поддерживаются файлы ресурсов, сохраненные в каталоге res/.

Docs Ссылка Ссылка:LibraryProjects

Решение:How to access resource files saved in res/ directory of library project from application project

Примечание: Если вы хотите получить доступ к ресурсам из самой библиотеки проекта добавить ресурсы в res/ directory не assets. Поскольку файлы в активах не будут связаны с файлом .jar. Вы можете получить к нему доступ, как обычно, используя ссылку, сгенерированную в файле R.java.

Ex: Чтобы получить доступ к изображениям из вытяжки использования

R.drawable.image_name 

Означает ли это, что я должен содержать ссылку на объекте контекста в любом месте, я хочу, чтобы получить какие-либо ресурсы?

Действительно вы должны содержать ссылку на контекст для доступа к ресурсам

Update:

Сейчас проект Android библиотека может быть сгенерирован, как AAR (Android Archive) файл, который позволяет связать ресурс файлы, необходимые для проекта библиотеки, вместо старого файла jar (Java Archive), который позволяет вам связывать Java-классы.

+0

Sankar: Вы говорите, что 'Библиотечные проекты не могут включать сырые активы'. Но я использовал некоторую библиотеку третьей части, которая объединяет классы и папку с ресурсами. В чем проблема? – hguser

+0

Могу я узнать, что такое сторонняя библиотека? –

+0

Это андроид sdk. Смотрите этот скриншот: http: //i.imgur.com/7I6aq1D.png. – hguser

0

Или вы можете использовать Связанную папку в Eclipse и связать свою папку с ресурсами в новом проекте.

+0

это помогает, может быть, в eclipse, а не в Android Studio, которые теперь должны быть предпочтительнее. Но я не верю, что это тоже поможет в eclipse, поскольку связанные папки не свяжутся, когда проект построен –

Смежные вопросы