我想创建一个SDK项目,该项目必须封装并存储包含该库的应用程序无法访问它的数据。库通过HTTPS接收数据。
所以,首先我研究了共享首选项不是选项,因为Android中的库没有自己的Context,只能使用应用程序的上下文,并且父应用程序可以看到共享首选项中的数据。
存储此类敏感数据以将其隐藏在使用lib的应用程序中的最佳选项是什么?我打算使用代码混淆方法和商业工具来尽可能地检索这些数据。那么也许我应该使用Android Keystore System或简单的加密就足够了?
编辑:好吧,似乎保存数据的唯一方法是加密它的变种之一。但还有另一个问题:它是否会阻止父应用程序访问RAM并从那里读取数据?假设设备没有root。
答案 0 :(得分:0)
您可以使用 SQLite 作为数据存储。它比依赖外部lib更好(因为在你的情况下,你正在编写库)。让我们保持清醒。
每个数据库实例都有自己的名称,应用程序通过名称访问它。作为一种可能的解决方案,您可以对数据库实例的名称进行编码并在运行时对其进行解码。这将隐藏开发人员的访问点。
实现SQLiteOpenHelper类:
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了解第二步的详细信息。