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

2023-12-25

我想构建 android 库,以便使用该库的应用程序无法访问除其中一个类之外的所有类。我怎样才能做到呢?


如果您的 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制对Android库的某些API的访问 的相关文章

随机推荐

  • 快速从函数返回多个值

    如何从 swift 中的函数返回 3 个相同类型 Int 的单独数据值 我正在尝试返回一天中的时间 我需要将小时 分钟和秒作为单独的整数返回 但所有这些都来自同一个函数 这可能吗 我想我只是不理解返回多个值的语法 这是我正在使用的代码 我在
  • MySQL OUTER JOIN 语法错误

    也许对你们来说是一个捂脸 但作为一个 SQL 查询新手 我遇到了语法问题 有谁知道出了什么问题吗 SELECT FROM company C OUTER JOIN company address A ON C company id A co
  • 如何在不安装 CPAN 模块的情况下安装它?

    这是我之前问题的后续关于开发 Perl 应用程序 https stackoverflow com questions 1679835 假设我使用 CPAN 模块开发了一个应用程序Module Install 现在我将代码上传到生产服务器 例
  • 自定义包编译选项 R

    我正在构建一个包含旧的包f77绝对应该使用以下代码构建o0优化选项 In the src Makevars在我的包中我添加了这一行 FFLAGS O0 pipe g LTO 但是当我编译我的包时 我看到 R 仍在使用 默认编译选项来自 us
  • SVG上的JS——获取元素的innerHTML

    我想从 SVG 文件中提取一些数据 我知道SVG是XML 所以我想用JS把数据导出来会很容易 所以 我想从 SVG 中提取一堆文本 所以 我启动了 chrome 的 JS 控制台 并尝试做一些事情 我需要得到所有tspan数组中的元素 提取
  • Aurelia js文件上传到服务器

    您好 我是 aurelia js 新手 我需要将文件上传到服务器 我使用 autrelia js materializecss 和 httpClient fetch 进行 api 调用 我不知道如何将文件发送到服务器 view
  • 如何签署使用 PhoneGap Build 构建的 Android APK?

    PhoneGap Build 似乎是一个很棒的工具 我用它构建了一个 apk 并在多个 Android 设备上进行了测试 现在我需要将其提交到 Google Play 商店 但我需要对 apk 进行签名 我已经在 Google 开发者网站上
  • 使用 pecl 在 OS X El Capitan (v10.11.1) 上安装 Mongodb 驱动程序

    我正在尝试为 OS X 安装 php mongo 驱动程序 我尝试过以下操作这些说明 http jafdip com how to install mongodb and the php mongo drive on mac os x sn
  • c# - 读取 HTML?

    我正在用 C 开发一个程序 我需要一些帮助 我正在尝试创建在某个网站上显示的数组或项目列表 我想做的是阅读锚文本 它是href 例如 这是 HTML div class menu 1 div class items div class mi
  • 演员和幕后工作者

    client Client 127 0 0 1 8786 direct to workers True future1 client submit Counter workers ninja actor True counter1 futu
  • 代码分析返回并建议不使用“out”参数

    我针对我创建的对象运行 VS 2008 代码分析工具并收到以下建议 警告 147 CA1021 Microsoft Design 考虑一种不 要求 returnValue 为 out 范围 我发现 out 参数相当有用 但没有意识到它们被认
  • 使用反射调用超类方法而不使用其实例

    请考虑以下演示继承和反射的代码 Parent class package basics public class Vehicle private void parentPrivateMethod System out println Thi
  • 以编程方式创建的窗口出现但不响应触摸事件

    我正在创建没有 MainWindow nib 的应用程序 更新到新的 SDK 后 我的应用程序完全崩溃了 在 main m 的 main 函数中 我有 int retVal UIApplicationMain argc argv nil A
  • 如何通过 *default* 命名空间 XmlObject.selectPath() ?

    我发现这种查询 XmlObject 以返回包含特定命名空间的元素的方法 XmlObject xobj XmlObject Factory parse a n a
  • Xcode Instruments - 僵尸 - 我在寻找什么?

    当我在 Xcode 中运行 Project Profile 并选择 Zombies 应用程序在模拟器中运行 NSZombie detection 已启用 但是我应该寻找什么来告诉我存在问题 我所看到的只是分配工具正在运行以及下面的统计数据
  • Guava - 如何根据谓词从列表中删除,并跟踪删除的内容?

    我有一个ArrayList过滤后 还有各种番石榴Predicates 来过滤它 该列表只有 50 100 个元素 我本来打算Iterables removeIf依次使用每个谓词 它可能不是最大效率 但没关系 至少removeIf对随机访问列
  • 使用 JavaFX 打印节点

    问题是这样的 我目前必须打印一个 a4 横向页面 其中包含当前 javaFx 场景的 部分 我必须打印的部分是 BorderPane 的一部分 我需要打印 Left Center 和 Bottom 节点 因此打印的页面应如下所示 最重要的打
  • Firebase Analytics 第一份报告需要多长时间?

    我们想尝试 firebase 提供的新分析功能 并遵循入门指南中的所有步骤 我们已经运行了该应用程序 logged很多事件 已经过去几个小时了 但仪表板上没有数据 我们只看到一条横幅 上面写着 您的分析数据很快就会出现在这里 获得我们的第一
  • 如何在PropertyGrid中显示带有子类的对象

    我将使用 PropertyGrid 来显示我的对象 这是信息类 Info 类具有一些由类类型组成的属性 但是 子类不显示属性 你有什么主意吗 代码片段 using System ComponentModel using System Win
  • 如何限制对Android库的某些API的访问

    我想构建 android 库 以便使用该库的应用程序无法访问除其中一个类之外的所有类 我怎样才能做到呢 如果您的 SDK 捆绑为 JAR 文件 而不是 AAR 您可以通过创建两个 JAR 文件 一个是常规库 第二个是剥离的 这将代表API