Android 不公开我所依赖的jar文件
我有一个AAR库,它依赖于某个Android 不公开我所依赖的jar文件,android,android-gradle-plugin,android-library,Android,Android Gradle Plugin,Android Library,我有一个AAR库,它依赖于某个lib.jar。我通过以下操作将其添加到AAR中: dependencies { implementation files('myexternallibs/lib.jar') ... } 在生成的AAR中,我仍然可以访问lib.jar中的类。根据SO中的许多答案,关键字实现应该可以防止这种情况发生。我错过了什么 实现将阻止访问由lib.jar实现的库,而不是此库 例如: Library1 |-> Class1 |-> Class
lib.jar
。我通过以下操作将其添加到AAR中:
dependencies {
implementation files('myexternallibs/lib.jar')
...
}
在生成的AAR中,我仍然可以访问
lib.jar
中的类。根据SO中的许多答案,关键字实现
应该可以防止这种情况发生。我错过了什么 实现将阻止访问由lib.jar实现的库,而不是此库
例如:
Library1
|-> Class1
|-> Class2
Library2 (implementation 'Library1')
|-> Class3 (this library can access Class1 and Class2)
YourProject (implementation 'Library2')
|-> Main (this library can access Class3, but not Class1 and Class2)
应使用普通的实现
,以及正确编写和构建的库
简单地将.jar
代码添加为Java模块可能是最简单的-
以提供可访问的方法的完全控制
请参阅。您是否定义了api
请参见gradle网站上的示例:
我将implementation
更改为compileOnly
。成功了
注:
如果使用此配置,则库模块必须包括
检查依赖项是否可用的运行时条件,以及
然后优雅地改变它的行为,这样它仍然可以正常工作
没有提供
为此,需要检查类路径,如下所示:
try {
Class.forName("com.company.ClassName");
}
catch (ClassNotFoundException ex) {
// class is not available
}
我很确定api
是不会公开它的。@user1506104您能定义我仍然可以访问lib.jar中的类的意思吗?您可以访问lib.jar类或它的依赖类吗?是的,这与我的情况类似。我有lib.jar(图中的Library1)。这是我的项目的一个依赖项,它通过使用“implementation'lib.jar”(图中的Library2)生成.aar。从该项目中,我可以访问lib.jar的类。当我从该项目生成一个.aar并在project2(图中的YourProject)中使用它时,即使我使用了@usee1506104我认为这是由生成.aar引起的。我认为实现是为模块和存储依赖性设计的,因为生成.jar(我不知道它是否与.aar相同)将把所有类放在一起(甚至是继承的类)@user1506104大多数库都没有混淆;请参阅-除非您能够控制它的构建,否则您无法完全控制可访问的内容;双包装(正如@Martin所建议的)可能是一种选择-但似乎有点糟糕。从未尝试过,只是想知道会有什么影响。
try {
Class.forName("com.company.ClassName");
}
catch (ClassNotFoundException ex) {
// class is not available
}