繁体   English   中英

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

[英]Good, elegant and secure way to pre load data for an android app

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

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

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

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

您可以拥有一个包含已定义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(); 

在任何你想要获得价值的班级。

您将不得不写入各种参数,但这很简单。 而如果

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

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

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

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

优雅是主观的,随你挑。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM