我想构建android库,以便除了一个类之外的所有类都无法访问将使用此库的应用程序。我怎么能这样做?
答案 0 :(得分:1)
如果您的SDK捆绑为JAR文件(而不是AAR),您可以通过创建两个JAR文件(一个是常规库,第二个被剥离 - 来模仿内部API隐藏,就像在Android SDK中一样)。这将代表API)。我们来看一个例子吧。
完整库(我称之为 sdk-runtime.jar )将包含一个类:Api.java
:
package info.osom.sdk;
public class Api {
public static void init() {
System.out.println("Api.init()");
anotherPublicMethod();
}
public static void anotherPublicMethod() {
System.out.println("Api.anotherPublicMethod()");
}
}
剥离的库(我将其称为 sdk-api.jar )将隐藏anotherPublicMethod()
,并仅公开init()
方法:
package info.osom.sdk;
public class Api {
public static void init() {
throw new RuntimeException("stub!");
}
}
指示SDK使用者配置其应用程序依赖关系,如下所示:
dependencies {
provided files('libs/sdk-api.jar')
apk files('libs/sdk-runtime.jar')
}
provided
配置将依赖项添加到编译中 仅限classpath(它不会添加到APK) 注意:如果您要创建Android应用模块,则不能将provided
用于AAR依赖项,仅适用于JAR。在Android库中 模块,您可以将它用于JAR和AAR。
apk
配置仅将依赖项添加到APK(它不会添加到 编译类路径) 注意:您只能将apk用于JAR二进制依赖项。它不支持库模块或AAR二进制依赖项。
由于我从anotherPublicMethod()
中剥离了sdk-api.jar
,因此它不适用于SDK使用者:
我创建了一个消耗上述SDK的simple application project。
答案 1 :(得分:0)
将它们标记为private
,与传统Java JAR中的相同。