我想设置一个变量SERVER_URL它将在环境生产、测试、开发之间切换。
我想做什么:
@Override
protected void onCreate(Bundle bundle) {
R.urls.SERVER_URL; // is it a valid approach using resources?
}
有没有办法在不更改代码的情况下切换环境(开发、生产、测试)?
实现这种行为的最佳方法是什么?
有没有办法在playstore my变量(SERVER\u URL)中配置它,或者我必须只在代码中实现它?
您可以使用不同的方法。理想情况下,您不应该在运行时更改URL以最大限度地减少攻击面。这种方法可能会直接影响您的应用程序的安全性。
如果您的目标是在不接触代码的情况下修改此URL,则可以在编译时绑定此值。您可以创建应用程序。属性文件,并针对不同的目标生成(开发、生产、测试)修改此文件。在代码中,可以从属性文件而不是硬编码的值中读取值。您可以将此文件放在您的“资产”文件夹中,并应用必要的模糊处理。这样,只有属性文件才会更改,应用程序的安全性保持不变。
另一种方法是在构建时提供此参数(当您执行gradlew命令时)。您可以添加命令行参数,这些参数将添加到BuildConfig。在代码中,您可以通过调用BuildConfig.SERVER\u URL来简单地引用URL。你可以遵循这一点来实现这一点。
在任何一种情况下,我都建议您在编译时绑定这个值。
有两种方法可以做到这一点:
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编译版本和构建工具的版本都是我们已经下载到本地的,如果本地没有就
问题内容: 我在MVC 4程序中使用Json.net。 我有一个阶级的对象。 我做了: 现在,我想添加一个额外的属性,如成。 我如何使用Json.net实现这一目标? 问题答案: 您有几种选择。 正如@Manvik所建议的那样,最简单的方法就是在类中添加另一个属性并在序列化之前设置其值。 如果您不想这样做,那么下一个最简单的方法是将您的对象加载到中,追加新属性值,然后从那里写出JSON。这是一个简
背景:我构建了一个Jersey应用程序(即一个WAR),并在服务器集群上部署它,在不同的服务器上配置不同的Spring配置,以启用或禁用服务器的不同部分,例如,某些服务器启用了资源,等等。这在Jersey 1.0中非常容易:我只是说, 在Spring配置中,让Jersey扫描特定包并启用其中的JAX-RS资源提供者。 现在在Jersey 2.0中,Spring不起作用,因此必须以编程方式在从派生的