2010-05-13 4 views
5

Ich habe einige wiederverwendbare Android-Komponente entwickelt, die im Grunde eine Klasse ist. Diese Klasse weist einige Ressourcenabhängigkeiten auf, z. einige png-Zeichen, einige XML-Layouts usw. Diese Klasse referenzierte also die automatisch generierte R-Datei. Ich möchte diesen Code in einem einzigen Paket wie JAR-Datei an andere Entwickler zur Verwendung in ihren Anwendungen verteilen.Wie verteilt man den wiederverwendbaren Android-Code in einem Paket?

Ich habe gelesen, dass die einzige mögliche Lösung ist, Code zusammen mit all meinen Ressourcen zu verteilen, die andere in ihren Ordner "res" (source) kopieren müssen.

Also habe ich eine JAR-Datei mit der Klassendatei (sagen MyClass, die in dem Paket com.xyz.android.app ist) und Ressourcen erstellt und versucht, dies in meiner neuen Anwendung zu verwenden.

Also fügte ich die JAR-Datei zu meinem neuen Anwendungen Build-Pfad mit add external jars Option in Eclipse und kopierte alle Ressourcen in die res-Ordner meiner neuen Anwendung. (Die Aktivität Klasse sagen MainActivity meiner neuen Anwendung ist in com.abc.myapplication Paket, nur für den Fall, wenn es hilfreich sein kann)

Aber wenn ich diese neue Anwendung ausführen gibt es java.lang.ClassCastException in der MyClass-Klasse. Ich habe versucht, die Anwendung zu debuggen, und dann habe ich festgestellt, dass in der MyClass-Klasse gibt es "R kann nicht gelöst werden" Problem.

Dann änderte ich MainActivity Paket zu com.xyz.android.app (was nicht der Weg ist, andere Entwickler werden gerne tun), aber wieder das gleiche Problem.

Aber wenn ich nur die Quelle Java-Datei so kopieren, dass sowohl MainActivity.java und MyClass.java sind in com.xyz.android.app Paket dann läuft die Anwendung gut.

Also, wenn ich so verteilen muss, dass andere Benutzer diese Paketnamen Dinge nicht stören müssen, wie kann ich dies erreichen? Bitte helfen Sie !!

bearbeiten

In android.jar, gibt es auch einige Ressourcen. Wie werden sie in einem Projekt referenziert? Wie werden sie in Android-Klassen verwendet? Es gibt auch android.R Datei?

Ist es nicht möglich, die gleiche Sache zu machen, d. H. JAR-Datei wie android.jar für meinen wiederverwendbaren Code zu machen?

Antwort

3

Wie Nic Strong bemerkte, gibt es nichts viel in das Projekt integriert, um dies zu verwalten, und aktuelle Hinweise sind, dass die bevorstehenden Änderungen an den SDK-Tools nur ein wenig helfen können.

Ich organisiere some other tools, um zu helfen, mit diesem Problem umzugehen. Ich hoffe, dass Entwicklerdokumentation in ein paar Tagen veröffentlicht wird.

+0

Klingt vielversprechend. Ich werde es mir ansehen! –

+0

In android.jar gibt es auch einige Ressourcen. Wie werden sie in einem Projekt referenziert? Wie werden sie in Android-Klassen verwendet? Es gibt auch android.R Datei? – Vasu

+0

Die "android.R-Datei" ist in das Betriebssystem integriert. Sie müssen es nicht verteilen, und die numerischen Werte ändern sich nicht. Also, das ist sicher ohne zusätzliche Arbeit zu verwenden. – CommonsWare

3

Dies ist im Moment nicht so einfach. Das Problem ist, dass das Projekt, das dein Glas benutzt, nicht nach Drawables usw. sucht. Die gute Nachricht ist, dass es bald möglich sein wird (hoffentlich mit SDK 2.2, das Gerüchten zufolge nächste Woche bei IO veröffentlicht wird). Sehen Sie diesen Blogpost http://mobilebytes.wordpress.com/2010/04/27/android-tools-version6-coming/

+1

Zitat von Google zu diesem Thema: "Ja, Bibliotheksprojekte sind hauptsächlich für Sie als Entwickler, um Ihren eigenen Code in Ihren Anwendungen zu teilen. Es geht nicht darum, wiederverwendbare Komponenten neu zu verteilen, es sei denn, Sie sind in Ordnung mit dem Senden (oder Posten) eine Zip-Datei Ihrer Bibliothek mit vollständiger Quelle. " – CommonsWare

+0

Ich habe bereits angenommen, dass das neue Projekt nicht weiß, in das Glas nach Ressourcen zu suchen. Also habe ich bereits die Ressourcen im neuen Projekt kopiert (wie auf http://stackoverflow.com/questions/1995004/packaging-android-resource-files-within-a-distributable-jar-file/2825174#2825174). Jetzt möchte ich, dass mein neues Projekt funktioniert. Also ich möchte wissen, ist es möglich? und wenn ja wie? – Vasu

1

Ich habe mit Mark Murphys ParcelHelper-Klasse unter http://github.com/commonsguy/cwac-parcel gespielt. Kurz gesagt, ist es eine Sammlung von Methoden, mit denen Sie auf die Komponenten von 'R' mit Namen zugreifen können, ohne 'R' in Ihren Code importieren zu müssen.

Wenn ich Ihre Frage richtig verstehe, ist dies genau das, was Sie wollen.Sie müssen möglicherweise noch einige Ressourcen wie Styleables in Ihr Projekt kopieren.

+0

Danke für die Antwort. zumindest, bis Google keine Lösung dafür bietet, was ich brauche, um den Code zu verteilen. – Vasu

Verwandte Themen