如果您的 SDK 捆绑为 JAR 文件(而不是 AAR),您可以通过创建两个 JAR 文件(一个是常规库,第二个是剥离的 - 这将代表API)。让我们看一个例子。
完整的图书馆(我称之为sdk-运行时.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()
method:
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')
}
根据文档 https://developer.android.com/studio/build/dependencies.html#library_dependency_configurations:
provided
配置将依赖添加到编译中
仅类路径(它不会添加到 APK)。
Note:如果您正在创建 Android 应用程序模块,则不能使用provided
对于 AAR 依赖项,仅适用于 JAR。在 Android 库中
模块,您可以将其用于 JAR 和 AAR。
apk
配置仅将依赖项添加到 APK(它不会添加到
编译类路径)。
Note:您只能将 apk 用于 JAR 二进制依赖项。它不支持库模块或 AAR 二进制依赖项。
自从我剥离了anotherPublicMethod()
from sdk-api.jar
,它对 SDK 使用者不可用:
我创建了一个简单的应用项目 https://github.com/alipov/android-sdk-hide-implementation-sample消耗上述SDK。