【问题标题】:How can I define local environment variables in android studio?如何在 android studio 中定义本地环境变量?
【发布时间】:2015-03-03 18:35:29
【问题描述】:

我和几个同事正在构建一个应用程序并使用 git 进行版本控制。

我们的应用使用了 Google Maps Api,它根据 SHA1 证书生成唯一的 api 密钥。要使用地图,必须在清单中引用 api 键

    ....

    <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="api_key_goes_here"/>

</application>

我们每个人都根据我们个人机器上的应用程序构建生成了自己的 api 密钥,但我们希望在我们的每台机器上都有一个属性文件,而不是检查到版本控制中,该文件存储我们唯一的 api 密钥,所以每次从存储库中提取时,我们不必手动更改清单中的 api 密钥。

这可能吗?我知道 android studio 中有属性文件,但我不知道如何使用它们,尤其是在这种情况下。

编辑:

完整清单:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>



<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".Application">
    <activity android:name="com.misfiremedia.parseexperiment.app.DispatchActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.misfiremedia.parseexperiment.app.SignUpActivity">

    </activity>
    <activity
        android:name="com.misfiremedia.parseexperiment.app.WelcomeActivity"
        android:configChanges="orientation|keyboardHidden"/>

    <activity
        android:name=".EmailLogInActivity"
        android:configChanges="orientation|keyboardHidden"/>

    <activity
        android:name="com.misfiremedia.parseexperiment.app.HomeActivity"
        android:configChanges="orientation|keyboardHidden"/>

    <activity
        android:name="com.misfiremedia.parseexperiment.app.home.PostLocationActivity"
        android:configChanges="orientation|keyboardHidden"/>

    <activity
        android:name=".NewPostActivity"
        android:configChanges="orientation|keyboardHidden"/>

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="THIS_IS_THE_KEY_WE_NEEDED_TO_HAVE_DIFFERENT"/>
</application>

【问题讨论】:

  • 我认为更好的方法是使用您的构建系统将属性插入清单文件(不依赖 IDE)。
  • @jangroth 听起来不错。你能指出我做这件事的正确方向吗?

标签: android git version-control android-studio android-gradle-plugin


【解决方案1】:

在 Android 中有一个 buildTypes 的概念,所以你可以做什么来创建三个 buildTypes 或者你的团队需要多少个。

如下图所示的一、二和三,三个不同的清单,每个清单都有不同的键。

现在团队成员可以选择他们各自的 buildVariant 并工作,当有人从 git 拉取时,选择的 buildVariant 没有任何影响,它会保持选择。

【讨论】:

  • 尝试让它工作,但是当我尝试使用与主清单中的不同的 api 密钥构建变体时,我遇到了诸如“清单合并失败”之类的问题。如果我使用与主清单相同的 api 密钥切换到变体,它会告诉我 apk 未签名。我已经使用了项目结构对话框中的设置,但仍然无法正常工作。
  • 能否请您包括您的确切清单,以便我可以在我的环境中尝试。
  • 我刚刚编辑过。另外,我发现我们可以将多个 SHA1 证书添加到单个 api 密钥中,所以从技术上讲,这现在不是问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-14
  • 2018-07-09
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2018-03-20
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多