Sie müssen eine Bindung zwischen Ihrer reinen Java-Bibliothek und Android definieren. Sie können Dependency Injection verwenden, um die Modelle mithilfe der Klassensignatur zu injizieren, und anschließend die parzellierbaren Modelle in der App (oder in einem anderen Projekt, z. B. einem Plug-in) definieren. Oder Sie könnten dasselbe mit Generika erreichen. Denken Sie daran, da die Java-Bibliothek technisch bereits kompiliert wurde, können Sie sie nicht ändern, indem Sie sie in das android-Projekt importieren (ich habe Leute gesehen, die einige Dateien aus einer Abhängigkeit "umschrieben" und sie dann mit dem gesamten ursprünglichen Pfad hinzufügen) den Klassenpfad zu täuschen, aber das ist sehr riskant, da Sie nicht in der Lage sein werden, mit dem Rest des Codes der Abhängigkeit zu interagieren, und wenn sich etwas ändert, wird die Sache kaputt gehen.
Wenn Sie Zugriff auf den Bibliotheksquellcode der Pure Java-Bibliothek haben, ändern Sie ihn, um Fabriken oder Modellanbieter zu verwenden. Wenn nicht, erweitern Sie die Modelle, fügen Sie parzellierbare Unterstützung hinzu und versuchen Sie, diese anstelle der ursprünglichen Modellklassen zu verwenden.
Beispiel:
nehmen wir an, wir ein Modell und einige Funktionen verwenden es:
public class myModel{
private int id;
private String name;
public void setId(int id){
this.id = id;
}
//more getters and setters
}
public interface myModelCreator<T>{
public myModel create(T toModel);
public T uncreate(myModel fromModel);
}
public static void doSomething(myModel model){
//some library operations
}
Jetzt, in der Android-Projekt:
public class myAndroidModel extends myModel implements Parcelable{
/*Implements the parcelable methods using the class accessors, or you can change the myModel members to protected.*/
}
public class myAndroidModelCreator implements myModelCreator<myAndroidModel>{
@Override
public myModel create(myAndroidModel toModel){
//create the myModel using the parcelable class.
}
@Override
public myAndroidModel uncreate(myModel fromModel){
//reverse operation.
}
}
Jetzt im Android-Projekt, Sie können die Parcelable-Subclass überall verwenden, und jedes Mal, wenn Sie die Bibliothek aufrufen müssen, können Sie die Creator-Schnittstelle mit den Parcelables als Argumente angeben. Eine weitere Alternative wäre die Bibliothek Methodensignaturen zu so etwas wie dies zu ändern:
public static void<T extends myModel> doSomething(T model){
//some library operations
}
So können Sie direkt die Parcel Subklassen verbrauchen. Je nach Hierarchie ist dies jedoch nicht möglich. Schließlich könnten Sie versuchen, die Abhängigkeitsinjektion in das Java-Projekt zu implementieren, indem Sie Guice und Roboguice im Android-Projekt verwenden. Da Roboguice Guice verwendet, ist es möglich, dass sie zusammenarbeiten können, aber das ist weit hergeholt.
Unklare auf die Frage ... warum sollten Sie Paketnamen überhaupt ändern müssen? Dies ist eine externe Abhängigkeit, warum können Sie sie nicht einfach importieren und verwenden? –
Weil ich es ursprünglich so gemacht habe, aber nicht funktioniert – Chisko
Was meinst du, es hat nicht funktioniert? Was ist passiert, als du es versucht hast? Was Christopher vorgeschlagen hat, ist der richtige Weg, und wenn Sie ein Problem damit haben, sollten Sie dieses Problem lösen (das Problem im Kern lösen), anstatt eine Menge Bridges und Wrapper zu erstellen. –