作者:幽幽独舞99 | 来源:互联网 | 2023-02-13 01:58
我在尝试获取外部Java项目时遇到了麻烦,因此我也可以在其上使用Android类.该库已集成在Android项目中.例如:我有几个我想要实现的模型类,Parcelable
因此它们可以相应地进行串行化,但是没有一个Android类可用.
澄清我只是为了试图解决这个问题而这样做
到目前为止我只尝试过:
更改和匹配外部库的包:
Android中的包名称
com.domain.androidproject
图书馆的包最初
com.domain.libproject
变成:
com.dommain.androidproject.libproject
但到目前为止没有运气.我将库导入为Gradle外部项目vía:
compile project(path: ':LibProject')
谢谢您的帮助.
1> Fco P...:
你必须在纯Java库和android之间定义一个绑定.您可以使用依赖注入来使用类签名注入模型,然后在应用程序内部(或插入另一个项目,如插件)中定义parcelable模型.或者你可以使用泛型来实现相同的功能.请记住,因为java库已经编译,从技术上讲,你不能通过将它导入android项目来改变它(我看到人们从一个依赖项"重写"一些文件,然后用整个原始路径添加它们欺骗类路径,但这是非常危险的,因为你不能与依赖的代码的其余部分进行交互,如果有什么变化,事情就会破坏).
如果您可以访问纯java的库源代码,则将其修改为使用工厂或模型提供者.如果没有,请扩展模型,添加parcelable支持,并尝试使用它们而不是原始模型类.
例:
让我们假设我们有一个模型和一些使用它的函数:
public class myModel{
private int id;
private String name;
public void setId(int id){
this.id = id;
}
//more getters and setters
}
public interface myModelCreator{
public myModel create(T toModel);
public T uncreate(myModel fromModel);
}
public static void doSomething(myModel model){
//some library operations
}
现在,在android项目中:
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{
@Override
public myModel create(myAndroidModel toModel){
//create the myModel using the parcelable class.
}
@Override
public myAndroidModel uncreate(myModel fromModel){
//reverse operation.
}
}
现在,在android项目中,您可以在任何地方使用parcelable子类,并且每次需要调用库时,您都可以使用parcelables作为参数提供创建者接口.另一种方法是将库方法签名更改为以下内容:
public static void doSomething(T model){
//some library operations
}
所以你可以直接使用parcelable子类.但是,根据您的层次结构,这可能是不可能的.最后,您可以尝试使用Android项目中的Guice和Roboguice在java项目中实现依赖注入.由于roboguice使用guice,它们可以互操作,但这是一个很长的镜头.