Android 库项目中的数据封装

Data encapsulation inside Android library project

我想创建一个 SDK 项目,该项目必须封装数据并将其存储在包含该库的应用程序无法访问的位置。图书馆通过 HTTPS 接收数据。

所以,首先我研究了共享首选项不是选项,因为 Android 中的库没有自己的上下文,只能使用应用程序的上下文,共享首选项中的数据将对父应用程序。

存储此类敏感数据以将其隐藏在使用该库的应用程序之外的最佳选择是什么?我计划将代码混淆方法与商业工具结合使用,以尽可能地难以检索这些数据。所以也许我应该使用 Android 密钥库系统或简单的加密就足够了?

编辑: 好的,似乎安全存储数据的唯一方法是加密它的变体之一。但是还有一个问题:它会阻止父应用程序访问 RAM 并从那里读取数据吗?假设设备没有 root。

您可以使用 SQLite 作为数据存储。它比依赖外部库更好(因为在您的情况下您正在编写库)。让我们保持轻松。

每个数据库实例都有自己的名称,应用程序通过名称访问它。作为一种可能的解决方案,您可以对数据库实例的名称进行编码并在运行时对其进行解码。这将对开发人员隐藏您的访问点。

实施 SQLiteOpenHelper class:

    public class FeedReaderDbHelper extends SQLiteOpenHelper {
        public static final int DATABASE_VERSION = 1;
        public static String DATABASE_NAME = Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==");
            public FeedReaderDbHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
        ...

其中 Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==") 是您 运行 获得正确数据库名称的方法。混淆后您的代码将如下所示:

com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ=="))

当然,Ylhsd1lYTnpkMjl5WkE9PQ==只是一个示例,您可以使用任何其他示例。

Check this answer第二步详情