在Android清单,而不是设置机器人:值R.string.value,是有可能从一个Java类中的静态字符串/本地字符串引用字符串?如果是这样,我该怎么做?是否有可能引用静态字符串是Android清单中的值?
我询问的目的,是因为我想知道是否有办法通过隐藏在静态引用不同的库字符串“键”,以进一步确保从逆向工程或黑客攻击的应用程序。
在Android清单,而不是设置机器人:值R.string.value,是有可能从一个Java类中的静态字符串/本地字符串引用字符串?如果是这样,我该怎么做?是否有可能引用静态字符串是Android清单中的值?
我询问的目的,是因为我想知道是否有办法通过隐藏在静态引用不同的库字符串“键”,以进一步确保从逆向工程或黑客攻击的应用程序。
你可以做,在的build.gradle文件,像这样:
buildTypes {
release {
resValue "string", "key", "[key here]"
}
debug {
resValue "string", "key", "[key here]"
}
}
而获得正常使用R.string.key
。
这将创建一个XML文件中的条目,就像你会为strings.xml中 – Blackbelt
你不能做到这一点在manifest.xml的,但你可以在文件的build.gradle这样添加值:
debug {
buildConfigField 'String', 'BASE_API_ENDPOINT', '"https://myapi.api.com/"'
}
release {
buildConfigField 'String', 'BASE_API_ENDPOINT', '"https://myapi.api.com/"'
}
,然后访问它们通过调用BuildConfig.BASE_API_ENDPOINT
的真棒好处这是您可以将其设置为构建类型,以便字符串可以根据其是用于开发,调试还是Play商店进行更改。
真。但是,这不是仍然只是将字符串变量注入清单,而不是确保字符串值? –
这不是清单,它是你的build.gradle文件。当应用程序被构建时,这将进入一个名为BuildConfig.java的java文件。如果用户反编译的应用程序,在它的整体就像他们将与他们manifest.xml中不会得到这个文件,所以据我知道这是安全的。 – LukeWaggoner
没有也不可能 – Blackbelt
@Blackbelt OK谢谢 –
相关 - http://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android –