Вам необходимо определить привязку между вашей чистой библиотекой java и андроидом. Вы можете использовать инъекцию зависимостей, чтобы вводить модели с использованием подписи класса, а затем определять возможные модели внутри приложения (или в другой проект, например, плагин). Или вы можете добиться того же, используя дженерики. имейте в виду, поскольку java-библиотека уже скомпилирована, технически вы не можете ее изменить, импортировав ее в проект Android (я видел, как люди «переписывали» некоторые файлы из зависимости, а затем добавляли их со всем исходным путем чтобы обмануть путь класса, но это очень рискованно, так как вы не сможете взаимодействовать с остальным кодом зависимостей, и если что-то изменится, вещь сломается).
Если у вас есть доступ к исходному коду библиотеки pure java, измените его, чтобы использовать фабрики или поставщики моделей. Если нет, расширьте модели, добавьте детальную поддержку и попытайтесь использовать их вместо исходных классов моделей.
Пример:
давайте предположим, что у нас есть модель и некоторые функции, используя его:
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
}
Теперь в андроида проекте:
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.
}
}
Теперь в андроида проекте, вы можете использовать посыльный подкласс повсюду, и каждый раз, когда вам нужно вызвать библиотеку, вы можете предоставить интерфейс создателя, используя parcelables в качестве аргументов. Другой альтернативой может быть изменение сигнатуры метода библиотеки к чему-то вроде этого:
public static void<T extends myModel> doSomething(T model){
//some library operations
}
Таким образом, вы можете непосредственно потреблять parcelable подклассы. Но в зависимости от вашей иерархии это может быть невозможно. Наконец, вы можете попытаться внедрить инъекцию зависимостей в проект java, используя Guice и Roboguice в проекте android. Поскольку roboguice использует guice, возможно, они могут взаимодействовать, но это длинный снимок.
Неясная на вопрос ... почему бы вам нужно изменить имена пакетов на всех? Это внешняя зависимость, поэтому почему вы не можете просто импортировать ее и использовать? –
Потому что я сделал это так, но не работал – Chisko
Что значит, что это не сработало? Что случилось, когда вы пробовали? То, что предложил Кристофер, - это правильный путь для этого, и если у вас есть проблемы с этим, это проблема, которую вы должны решить (решить проблему в ее ядре), а не создавать кучу мостов и оберток. –