如何限制对Android库的某些API的访问

时间:2015-01-21 13:13:12

标签: android sdk manifest

我想构建android库,以便除了一个类之外的所有类都无法访问将使用此库的应用程序。我怎么能这样做?

2 个答案:

答案 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')
}

根据documentation

  

provided配置将依赖项添加到编译中   仅限classpath(它不会添加到APK)   注意:如果您要创建Android应用模块,则不能将provided用于AAR依赖项,仅适用于JAR。在Android库中   模块,您可以将它用于JAR和AAR。

     

apk配置仅将依赖项添加到APK(它不会添加到   编译类路径)   注意:您只能将apk用于JAR二进制依赖项。它不支持库模块或AAR二进制依赖项。

由于我从anotherPublicMethod()中剥离了sdk-api.jar,因此它不适用于SDK使用者:

enter image description here

我创建了一个消耗上述SDK的simple application project

答案 1 :(得分:0)

将它们标记为private,与传统Java JAR中的相同。