为Android应用程序预加载数据的好,优雅和安全的方法

时间:2012-10-03 16:48:54

标签: android sqlite

我有一个Android应用程序,我需要预加载一些“静态配置”数据,而不是可编辑的。这些数据也是关系型的。并且可能会随着应用程序功能的增长而及时更改。

环顾四周,我已经看到了预先准备sqlite3 db文件的建议,然后将其代码放在典型的db目录中(/data/data/whateverapp/databases/preloaded.db)。 但是使用这种方法我担心拥有root权限的人(即root用户)可能会输入并编辑数据。并且必须加密/解密db文件可能会变得麻烦而且一团糟(没有本机方法可以实现这一点)。

我甚至看到过使用静态数据列表构建类的建议。哪个可能有用,但有点凌乱而且不优雅。

那么,这将是一种正确,优雅和安全的方法来实现这一目标吗?

3 个答案:

答案 0 :(得分:1)

您可以拥有一个包含已定义XML资源的配置文件。我做到了这一点并且效果很好。这样,如果您有多个配置,则可以备份这些配置文件以使用旧版本。据我所知,我认为你不能以编程方式编辑这些资源。

以下是我如何使用它的简单示例。 即:

清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="blah.blah"
      android:versionCode="@integer/version_code"
      android:versionName="@string/build_version">

我的资源档案:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="version_code">1</integer>
    <string name="build_version">1.0</string>
        <string name="param">Some other Param</string>
</resources>

现在,您的程序将能够在运行时获取版本代码和版本名称的资源。要以编程方式获取其他值,可以使用以下代码:

public class Configuration {
Context thisContext;
private String Param = "";

    public Configuration(Context cont){
        thisContext = cont;
        String param= thisContext.getResources().getString(R.string.param);

        setParam(param);
    }

    /**
     * @return the param
     */
    public static String getParam() {
        return Param;
    }
    /**
     * set the Param
     */
    public static void setParam(String param) {
        Param= param;
    }
}

然后您可以在应用程序onCreate中创建配置对象,如下所示:

new Configuration(this);

然后您可以使用该功能

Configuration.getParam(); 

在任何想要获得价值的课程中。

您还必须写入各种参数,但这很简单。如果

您需要引用旧版本,就像交换配置文件一样简单。

希望这会对你有所帮助! 干杯

答案 1 :(得分:1)

有很多方法可以做到这一点:

  • 在应用程序中捆绑资源,在首次运行时提取和更新数据库等
  • 从服务器下载,使用GCM通知数据更新。数据更改时无需更新整个应用
  • 使用Google Play扩展程序(或扩展程序?)文件。数据从Google服务器下载,您的应用需要进行身份验证。您需要推送新的应用版本才能更新数据。
  • 使用远程API,忘记处理原始数据

优雅是主观的,随你挑选。

答案 2 :(得分:0)

我的建议是使用基于服务器的数据库并使用严格的安全性让用户访问服务器。如果你安全地加密和混淆你的访问代码并保护用户凭据,你已经挡住了大量没有经验的黑客,并且不必担心根电话,因为数据库甚至不在手机上。正如评论中所提到的,黑客已经变得非常聪明,但这不应该阻止你让他们的生活更难破解你的代码。