当前位置: 首页 > 知识库问答 >
问题:

如何配置额外属性以加载到android应用程序初始化中?

尚嘉勋
2023-03-14

我想设置一个变量SERVER_URL它将在环境生产、测试、开发之间切换。

我想做什么:

@Override
protected void onCreate(Bundle bundle) {
    R.urls.SERVER_URL; // is it a valid approach using resources?
}

有没有办法在不更改代码的情况下切换环境(开发、生产、测试)?

实现这种行为的最佳方法是什么?

有没有办法在playstore my变量(SERVER\u URL)中配置它,或者我必须只在代码中实现它?

共有2个答案

凌钊
2023-03-14

您可以使用不同的方法。理想情况下,您不应该在运行时更改URL以最大限度地减少攻击面。这种方法可能会直接影响您的应用程序的安全性。

如果您的目标是在不接触代码的情况下修改此URL,则可以在编译时绑定此值。您可以创建应用程序。属性文件,并针对不同的目标生成(开发、生产、测试)修改此文件。在代码中,可以从属性文件而不是硬编码的值中读取值。您可以将此文件放在您的“资产”文件夹中,并应用必要的模糊处理。这样,只有属性文件才会更改,应用程序的安全性保持不变。

另一种方法是在构建时提供此参数(当您执行gradlew命令时)。您可以添加命令行参数,这些参数将添加到BuildConfig。在代码中,您可以通过调用BuildConfig.SERVER\u URL来简单地引用URL。你可以遵循这一点来实现这一点。

在任何一种情况下,我都建议您在编译时绑定这个值。

连成益
2023-03-14

有两种方法可以做到这一点:

1/Bystring资源

添加名为secret\u key的资源文件。xml或任何名称将其与其他资源文件分隔开来。将键、apiendpoint作为普通字符串资源放在这里,如果不想搞砸本地化,请记住添加translateable=“false”

将该文件放在app/debug/res/value/中。如果不存在,请创建一个新的debug文件夹。对staging发布执行相同操作,Android将自动使用与构建类型同名的文件夹。

2/By属性文件

HOST="http://api.blablabla.com"
CLIENT_ID="hahaha"
CLIENT_SECRET="hehehe"

将其绑定到应用程序的BuildConfig变量。gradle,对其他生成类型执行相同的操作:

def getPropertiesFile = { path ->
    Properties properties = new Properties()
    properties.load(new FileInputStream(file(path)))
    return properties
}

android {
    ...

    buildTypes {
        debug {
            ...

            getPropertiesFile('./config/development.properties').each { p ->
                buildConfigField 'String', p.key, p.value
            }
        }
        ...
    }
}

在你的应用程序中,只需调用BuildConfig。主机获取所需字符串

更新

忽略. gitignore中的这些配置文件:

app/config
secret_keys.xml
 类似资料:
  • 问题内容: 我有一个静态util类,它对敏感数据进行一些字符串操作。在使用此类之前,我需要使用我喜欢存储在文件中的值(例如用户名/密码)初始化某些静态变量。 我不太熟悉Java 中文件的加载方式,尤其是在 Spring DI 容器之外。任何人都可以帮助我/如何做到这一点? 谢谢! 另外: 文件的精确位置是未知的,但是它将在类路径上。有点像 问题答案: 首先,从中获取要加载的属性。这可以来自多个位置

  • 但是我得到错误“在初始化之前使用属性”这是有道理的,因为我只声明。但是我不知道我应该如何或为了什么初始化输入,因为值是输入

  • Compile Sdk Version: 指定Android的编译版本. 对应build.gradle文件中的参数是: compileSdkVersion 23 Build Tools Version: 指定构建工具的版本. 对应build.gradle文件中的参数是: buildToolsVersion "23.0.2" SDK编译版本和构建工具的版本都是我们已经下载到本地的,如果本地没有就

  • 背景:我构建了一个Jersey应用程序(即一个WAR),并在服务器集群上部署它,在不同的服务器上配置不同的Spring配置,以启用或禁用服务器的不同部分,例如,某些服务器启用了资源,等等。这在Jersey 1.0中非常容易:我只是说, 在Spring配置中,让Jersey扫描特定包并启用其中的JAX-RS资源提供者。 现在在Jersey 2.0中,Spring不起作用,因此必须以编程方式在从派生的

  • 问题内容: 我在MVC 4程序中使用Json.net。 我有一个阶级的对象。 我做了: 现在,我想添加一个额外的属性,如成。 我如何使用Json.net实现这一目标? 问题答案: 您有几种选择。 正如@Manvik所建议的那样,最简单的方法就是在类中添加另一个属性并在序列化之前设置其值。 如果您不想这样做,那么下一个最简单的方法是将您的对象加载到中,追加新属性值,然后从那里写出JSON。这是一个简