39

当我使用 Google Maps API 时,我习惯于在 Eclipse 中使用自定义调试密钥(这实际上是我的生产密钥)

这种操作使我能够在我的调试和发布版本中为地图和大多数 Google Play 服务(在应用程序计费中)使用相同的 API 密钥。

这真的很方便,因为不需要更改清单中的密钥。

在此处输入图像描述

不幸的是,随着迁移到 Android Studio,我错过了这个功能。

知道在哪里可以找到此选项吗?

非常感谢。

4

7 回答 7

67

您在 build.gradle 文件中定义一个密钥库。请参阅此处的签名配置部分:https ://developer.android.com/studio/build/index.html

在您的情况下,您想重新定义调试变体的密钥库:

android {
    signingConfigs {
        debug {
            storeFile file("your.keystore")
        }
    }
}

但是,您确实应该使用两个不同的密钥库进行调试和发布配置。

于 2013-06-19T15:13:09.727 回答
26

在最近的 Android Studio 0.8.9 上,你会发现它在一个更好的地方:

 File->Project Structure
  1. 在“签名”选项卡中添加密钥库
  2. 为您的调试/发布“构建类型”选择它。
  3. 确保别名与您的密钥库匹配(keytool -list -v 显示您的别名)

它创建 gradle 的东西,在“应用”上自动同步,并像魅力一样立即工作。

于 2014-11-25T02:50:45.410 回答
18

嗨,如果您不想对所有这些东西进行硬编码,请执行以下简单步骤

->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) 请指定正确的别名和密码

于 2015-02-05T09:56:57.583 回答
9

这是我将两个密钥从 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 变量的条件,然后重试。

我从这里这里找到的信息拼凑了这些步骤。

于 2015-03-01T15:12:38.807 回答
5

您可以debug.keystore您的项目 独立指定。
分两步,图片如下:(Android Studio v0.5.2
第一步:点击按钮project structure第1步

第2步:添加debug.keystore如下。 在此处输入图像描述

于 2014-05-13T13:33:55.310 回答
4

密钥库需要在 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.keystore link

于 2016-02-02T06:36:54.927 回答
0

正如所指出的,您可以使用 gradle 文件来指定它。我还发现使用 Home 文件夹作为路径的一部分非常方便。它使在团队中工作时更容易。这是我的建议:

android {
    signingConfigs {
        debug {
            storeFile file(System.properties['user.home']+"/.android/custom.debug.keystore")
        }
    }
}
于 2016-07-29T08:17:50.297 回答