Java AndroidStudio:如何使用自定义类进行编译,但仍使用模块依赖关系

Java AndroidStudio:如何使用自定义类进行编译,但仍使用模块依赖关系,java,android,compilation,shared-libraries,patch,Java,Android,Compilation,Shared Libraries,Patch,假设Android应用程序使用jar库,当库被指定为依赖项时,一切正常: dependencies { ... ... compile 'org.example:example:1.1.1' ... } 但是:org.example代码中的一个类需要调整 一种方法是获取源代码并将所有代码放在java文件夹中,然后删除模块。调整完成后,将编译整个库 另一种方法是在.jar文件中调整、编译和替换.class文件 这两种方法都有缺点 我的问题是:有没有更简单的方法来调

假设Android应用程序使用jar库,当库被指定为依赖项时,一切正常:

dependencies {
    ...
    ...
    compile 'org.example:example:1.1.1'
    ...
}
但是:org.example代码中的一个类需要调整

一种方法是获取源代码并将所有代码放在java文件夹中,然后删除模块。调整完成后,将编译整个库

另一种方法是在.jar文件中调整、编译和替换.class文件

这两种方法都有缺点

我的问题是:有没有更简单的方法来调整库中的代码

当我尝试创建包,将需要更改的类放入java文件夹时,我遇到了一个错误:

将字节码转换为索引时出错: 原因:com.android.dex.DexException:多个dex文件定义Lorg/example/ClassNeedingChange


我只是想知道是否有一个技巧可以让Java文件夹中的代码覆盖库jar文件中的内容

其他信息:


尽管上面没有特别说明,但是需要调整的类被隐藏在库中,并被库的代码引用;我不直接叫它。对于需要调整的类是我的代码直接调用的类,并且只有我的代码直接调用的类的简单情况,那么使用Java构造扩展该类将是一个简单的问题。但对于这个简单的案例,我不需要发布这个问题

扩展代码中需要调整的类,并重写适当的方法

Class A extends TweakMe {

 @Override
 public void someTweakedMethod() {
     //Do stuff
  }
}

我只是想知道,让Java文件夹中的代码覆盖库jar文件中的内容是否有诀窍。-从JAR文件中删除该类。尽管如此,依我看,唯一可维护的选项是子类路由或分叉库获取源代码…,尽管我会将其放在项目的单独模块中,而不是直接放在项目本身中。这样做会让未来的维护成为一个难题。如果库发生变化怎么办?你必须更新这个。您也可以在gradle中本地编译它,并告诉gradle查找本地版本,但这仍然会带来相同的维护问题创建一个针对lib的PR以提供您想要的行为?那么每个人都会受益。什么是公关?我想你的意思是向项目负责人寻求改变?这可能是一种可能性,但需要花费大量的时间和精力。PR-Pull请求。进行更改,并在公共repo中提交,假设它是开源的,并要求他们将其拉入,如果类是final或方法私有,则该更改将不起作用。如果需要调整的类是从库的其他各个部分使用的,则该更改也将不起作用;这些其他用途将不知道A,并将使用TweakMe的默认功能。