【发布时间】:2013-06-19 10:38:00
【问题描述】:
在使用 Google Maps API 时,我习惯于在 Eclipse 中使用自定义调试密钥(实际上是我的生产密钥)
这种操作允许我在调试和发布版本中为地图和大多数 Google Play 服务(在应用计费中)使用相同的 API 密钥。
这真的很方便,因为不需要更改清单中的密钥。
很遗憾,随着迁移到 Android Studio,我缺少此功能。
知道在哪里可以找到这个选项吗?
非常感谢。
【问题讨论】:
在使用 Google Maps API 时,我习惯于在 Eclipse 中使用自定义调试密钥(实际上是我的生产密钥)
这种操作允许我在调试和发布版本中为地图和大多数 Google Play 服务(在应用计费中)使用相同的 API 密钥。
这真的很方便,因为不需要更改清单中的密钥。
很遗憾,随着迁移到 Android Studio,我缺少此功能。
知道在哪里可以找到这个选项吗?
非常感谢。
【问题讨论】:
您在 build.gradle 文件中定义了一个密钥库。请参阅此处的签名配置部分:https://developer.android.com/studio/build/index.html
在您的情况下,您想为调试变体重新定义密钥库:
android {
signingConfigs {
debug {
storeFile file("your.keystore")
}
}
}
但是,您确实应该使用两个不同的密钥库进行调试和发布配置。
【讨论】:
在最近的 Android Studio 0.8.9 上,您会发现这在一个更好的地方:
File->Project Structure
它创建 gradle 的东西,在“应用”上自动同步,并像魅力一样立即工作。
【讨论】:
嗨,如果您不想对所有这些东西进行硬编码,那么请执行以下简单步骤
->Your project
->Your Module
->Right click on your module
->go to open module settings
->Go to Signing section
->Specify all the attribute here and browse your Custom debug key in Store File
然后你会发现下面的代码将由 android studio 在 build.gradle 中自动创建
signingConfigs {
debug {
storeFile file('custom_debug_keystore')
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
}
}
注意:
1) 请不要在代码中手动使用 .keystore 进行手动配置
2) 请指定正确的别名和密码
【讨论】:
这是我将我的两个密钥从 gradle.build 文件中移出到一个不会包含在任何构建或存储库提交中的文件的完整步骤。
1) 创建一个 gradle.properties(如果您还没有)。
此文件的位置取决于您的操作系统:
/home/<username>/.gradle/ (Linux)
/Users/<username>/.gradle/ (Mac)
C:\Users\<username>\.gradle (Windows)
2) 添加一个指向yourprojectname.properties 文件的条目。
(Windows 示例)
yourprojectname.properties=c:\\Users\\<username>\\signing\\yourprojectname.properties
3) 在步骤 2 中指定的位置创建 yourprojectname.properties 文件,并提供以下信息:
keystore=C:\\path\\to\\keystore\\yourapps.keystore
keystore.password=your_secret_password
4) 修改您的gradle.build 文件以指向yourprojectname.properties 文件以使用变量。
if(project.hasProperty("yourprojectname.properties")
&& new File(project.property("yourprojectname.properties")).exists()) {
Properties props = new Properties()
props.load(new FileInputStream(file(project.property("yourprojectname.properties"))))
android {
signingConfigs {
release {
keyAlias 'release'
keyPassword props['keystore.password']
storeFile file(props['keystore'])
storePassword props['keystore.password']
}
debug {
keyAlias 'debug'
keyPassword props['keystore.password']
storeFile file(props['keystore'])
storePassword props['keystore.password']
}
}
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "your.project.app"
minSdkVersion 16
targetSdkVersion 17
}
buildTypes {
release {
}
}
}
}
dependencies {
...
}
5) 享受吧! 现在您的所有密钥都将位于目录的根目录之外,但您仍然可以享受每次构建自动化的乐趣。
如果您在 gradle.build 文件中收到有关“props”变量的错误,那是因为您没有在第一个 if 条件内执行“android {}”块,其中分配了 props 变量,所以只需将整个 android{ ... } 部分移动到分配 props 变量的条件,然后再试一次。
【讨论】:
您可以为您的项目独立指定debug.keystore。
两个步骤,如下图:(Android Studio v0.5.2)
步骤1:点击project structure的按钮。
第 2 步:添加debug.keystore,如下所示。
【讨论】:
keystore需要在build.gradle中,示例如下:
android{
signingConfigs {
release {
storeFile file('/path/platform.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
...
buildTypes {
release {
signingConfig signingConfigs.release
}
}
Eclipse 并没有真正要求输入密码或别名,但 gradle 会。 我相信 Eclipse 只是假设它是密码:android 和别名:androiddebugkey 。这可能不适用于您的密钥库,但我会在 gradle 上尝试这样做。
如果您知道密码,但不确定别名,您也可以运行以下命令获取别名:
keytool -list -keystore /path/platform.keystorelink
【讨论】:
正如所指出的,您可以使用 gradle 文件来指定它。 我还发现使用 Home 文件夹作为路径的一部分非常方便。它使在团队中工作时更容易。这是我的建议:
android {
signingConfigs {
debug {
storeFile file(System.properties['user.home']+"/.android/custom.debug.keystore")
}
}
}
【讨论】: