Ohne eine Aktivität scheint es nicht möglich, die R-Klasse zu verwenden. Wenn Sie eine Testanwendung in Ihrer Bibliothek haben, kann die Testanwendung auf R zugreifen, jedoch nicht auf die Bibliothek selbst.
Noch können Sie auf die Ressourcen nach Name zugreifen. Zum Beispiel, ich habe eine Klasse wie diese in meiner Bibliothek,
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 finden Sie weitere Informationen über ContextWrappers)
Und den Konstruktor eines Objekts in der Bibliothek nimmt diesen Kontext Wrapper,
public class MyLibClass {
public MyLibClass(MyContext context) {
int resId = context.getResourceId("a_file_inside_my_lib_res");
}
}
Dann aus der App, die die lib verwendet, muss ich den Kontext passieren,
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
MyLibClass a = new MyLibClass(new MyContext(this));
}
}
MyContext, MyLibClass und a_file_inside_my_lib_res, alle leben im Bibliotheksprojekt.
Ich hoffe es hilft.
Mit Bibliothek meinen Sie Bibliotheksprojekt oder JAR/AAR-Datei? Sie können nur von Bibliotheksprojekten oder AAR-Dateien auf Ressourcen zugreifen, nicht von JAR-Dateien. – shkschneider
Bibliotheksprojekt, keine JAR-Datei. – sqshemet
Um fair zu sein, bekomme ich nicht Ihre Anwendung Setup. Sie haben "keine Aktivität" oder "Kontext"? Bauen Sie eine Android-Anwendung Sir? – shkschneider