【问题标题】:What is the equivalent of Eclipse "Custom debug Keystore" in Android studio?Android工作室中的Eclipse“自定义调试密钥库”的等价物是什么?
【发布时间】:2013-06-19 10:38:00
【问题描述】:

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

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

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

很遗憾,随着迁移到 Android Studio,我缺少此功能。

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

非常感谢。

【问题讨论】:

    标签: android android-studio


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢,我会试试的。为什么我应该使用不同的键?结果和我获得的时间是巨大的......
    • 调试密钥库的密码有什么限制吗?
    • 如果我想在调试中为每种风格创建一个特定的密钥库怎么办?
    • @Waza_Be 释放密钥库和密码需要严密保护。调试密钥库更方便。如果有人掌握了您的发布密钥库(和密码,或者他们可能会暴力破解密码),他们可以生成安装在您发布的那些之上的 apk(例如:包括恶意软件)。如果他们也有您的 Play 商店登录名,他们可以将自己的更新发布到 Play 商店。使用您的 maps api 密钥,他们可以向 maps api 发出许多请求并用完您的配额,最终可能会向您收费,并在您的生产应用程序中取消地图功能。
    【解决方案2】:

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

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

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

    【讨论】:

    • 请注意,您不需要指定所有字段。对于调试密钥,您可以省略默认值(别名“androidebugkey”和密钥库/密钥密码设置为“android”)。对于发布密钥,您可能不想在此处输入密码,因为它将以明文形式存储在 build.gradle 中,然后最终会出现在您的 DVCS 中。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      我根据herehere 找到的信息将这些步骤拼凑在一起。

      【讨论】:

        【解决方案5】:

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

        第 2 步:添加debug.keystore,如下所示。

        【讨论】:

        • 希望在 Android Studio v0.8 中这个屏幕不可用。唯一的方法可能是 build.gradle,如果我错了请纠正我。
        【解决方案6】:

        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

        【讨论】:

          【解决方案7】:

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

          android {
              signingConfigs {
                  debug {
                      storeFile file(System.properties['user.home']+"/.android/custom.debug.keystore")
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-12
            • 2021-12-03
            • 1970-01-01
            • 1970-01-01
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多