在我的Android Studio项目中有两个build configuration有一些buildConfigField:
buildTypes {
def SERVER_URL = "SERVER_URL"
def APP_VERSION = "APP_VERSION"
debug {
buildConfigField "String", SERVER_URL, "http://dev.myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
}
release {
buildConfigField "String", SERVER_URL, "https://myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
Run Code Online (Sandbox Code Playgroud)
生成的BuildCofig.java如下:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.mycuteoffice.mcoapp";
public …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用API.我目前从java界面管理API密钥
public interface APIContract {
//The API KEY MUST NOT BE PUBLISH. It is possible to generate a new one for free from www.themoviedb.org
//Remove before commit !!!
String API_KEY = "abcdefghijklmnopqrstuvwxyz";
/...
}
Run Code Online (Sandbox Code Playgroud)
这样做.我可以使用APIContract.API_KEY,但正如您在注释中看到的那样,如果我使用git和公共存储库(我不想发布此密钥),这是不安全的.
所以这是我的问题:是否可以将此密钥移动到另一个我可以从我的应用程序轻松访问但不会被提交的地方?
我发现这个线程使用gradle存储密钥,但我需要提交build.gradle文件,因此它不能完成这项工作.
有人知道如何解决这个问题吗?我没有在stackoverflow中发现类似的问题,但也许我错过了一些东西
编辑
我喜欢在任何Java代码之外移动密钥的想法,因为其他人(可能是非技术人员)可以轻松管理自己的密钥.我正在考虑使用gradle文件settings.gradle.
在我的 Android 项目中,我想以安全的方式存储 API 密钥。该密钥是从应用程序外部生成的,需要在构建应用程序之前以某种方式存储在应用程序中。
我已经看到了一些如何使用 KeyStore 的示例(例如this或this),但据我了解,这些是存储运行时生成的密钥的解决方案,而不是我将存储在代码中某处的密钥。
我还检查了此处解释的其他方法,但由于逆向工程,它们看起来可以很容易地检索 API 密钥。
我也不想将我的密钥存储在我的代码中,也是因为它可以通过逆向工程轻松检索。
其目的是能够在每次调用我制作的网络服务时发送该密钥,因此我确定(或几乎确定)该调用来自我正在制作的原始应用程序,这将是在 Play 商店上发布,而不是从其他地方发布。
我远不是安全专家,所以任何帮助将不胜感激。
谢谢。