3

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

环顾四周,我看到了预先准备 sqlite3 db 文件的建议,然后将其按代码放置在典型的 db 目录(/data/data/whateverapp/databases/preloaded.db)中。但是使用这种方法,我担心具有 root 权限的人(即 root 电话)可能会输入和编辑数据。并且必须加密/解密 db 文件可能会变得很麻烦和混乱(没有本地方法可以实现这个 afaik)。

我什至看到了使用静态数据列表构建类的建议。这可能有效,但也有点混乱而且不优雅。

那么,实现这一目标的正确、优雅和安全的方法是哪一种呢?

4

3 回答 3

1

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

这是我如何使用它的一个简单示例。IE:

显现:

<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(); 

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

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

您需要参考旧版本,就像换出配置文件一样简单。

希望这可以帮助你!干杯

于 2012-10-03T19:29:01.780 回答
1

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

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

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

于 2012-10-04T02:58:47.523 回答
0

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

于 2012-10-03T18:11:19.053 回答