Без какой-либо деятельности не представляется возможным использовать класс R. Если у вас есть тестовое приложение в вашей библиотеке, тестовое приложение сможет получить доступ к R, но не от самого lib.
Тем не менее, вы можете получить доступ к ресурсам по имени. Например, у меня есть класс, как это в моей библиотеке,
public class MyContext extends ContextWrapper {
public MyContext(Context base) {
super(base);
}
public int getResourceId(String resourceName) {
try{
// I only access resources inside the "raw" folder
int resId = getResources().getIdentifier(resourceName, "raw", getPackageName());
return resId;
} catch(Exception e){
Log.e("MyContext","getResourceId: " + resourceName);
e.printStackTrace();
}
return 0;
}
}
(см https://stackoverflow.com/a/24972256/1765629 для получения дополнительной информации о ContextWrappers)
и конструктор объекта в библиотеке принимает, что контекст обертку,
public class MyLibClass {
public MyLibClass(MyContext context) {
int resId = context.getResourceId("a_file_inside_my_lib_res");
}
}
Затем из приложения, которое использует LIB, я должен передать контекст,
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
MyLibClass a = new MyLibClass(new MyContext(this));
}
}
MyContext, MyLibClass и a_file_inside_my_lib_res, все они живут внутри проекта библиотеки.
Надеюсь, это поможет.
По библиотеке вы имеете в виду проект библиотеки или файл JAR/AAR? Вы можете получить доступ к ресурсам только из проектов библиотек или файлов AAR, а не файлов JAR. – shkschneider
Проект библиотеки, а не файл JAR. – sqshemet
Чтобы быть справедливым, я не получаю вашу установку приложения. У вас есть «нет активности» или «контекст»? Вы строите Android-приложение sir? – shkschneider