20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidManifest.xmlにAPIキーを書いたコードをGitHubにコミットしないために

Posted at

#はじめに
個人開発なんかでAPIのチュートリアルなんかにしたがってコードを書いていると、利用するためのAPIキーをAndroidManifest.xmlに書くことがあるのですが、そのコードをつい何も考えずGitHub上に上げてしまいがちです。

AWSですが、こんな記事も見かけたので、APIキーは安易にGitHub上にコミットしていいものではなさそうですね。
かと言って、そこだけ手書きで毎回書き換えるという運用もしたくはありません。

(なお現状はGitHubで検索(GoogleMapsAPIキーの例)してみると、ベタ書きされていたり、良くてもstrings.xmlにベタ書きされたものが多くある模様)

そこで今回は、どうにかしてAPIキーをコミットせずコードに反映させるかを調べてみました。

開発環境

  • OS X 10.9.5
  • AndroidStudio 2.0

##やること

  • ※APIキーだと反映されているかの確認が色々面倒…
  • 同じくManifestに記載して確認が簡単なMainActivity.javaのlabelの文字列をコミットせずに反映させる。

##やったこと
ManifestManagerのmanifestPlaceHoldersを利用して、設定したい値を環境変数から取得します。

  • ManifestManagerの利用
  • build.gradleの値を環境変数から取得
  • 環境変数の設定
  • デバッグAPKをインストールして確認

###ManifestManagerの利用
manifestPlaceHoldersでは${}で囲って変数を埋め込みます。

AndroidManifest.xml
        <activity
            android:name=".MainActivity"
            android:label="${label}"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

###build.gradleの値を環境変数から取得
manifestPlaceholdersに先ほどManifest側で埋め込んだ変数を定義していく。
今回はLABELという環境変数を参照させる。

※ベタ書きでも動くがそれだと本末転倒なので更に環境変数を参照するようにする。

app/build.gradle
    buildTypes {
        debug {
            minifyEnabled false
            signingConfig signingConfigs.debug
            //manifestPlaceholders = [label: "testlabel"] #ベタ書きの例、これでも動くが...
            manifestPlaceholders = [label: System.getenv("LABEL")]
        }
    }

###環境変数の設定
ターミナル上でlaunchctlを使って設定してく。

#LABELという環境変数に"testlabel"を設定する
$ launchctl setenv LABEL testlabel

#設定されていることを確認する
$ launchctl getenv LABEL
testlabel

###デバッグAPKをインストールして確認
設定したら反映のためにAndroidStudioを再起動して、作成したデバッグapkを入れてみる。

無事に「testlabel」がlabelに反映されました。
image

##おわりに
複数人や複数デバイスで開発する際などは環境変数を揃えないといけないのが面倒な気がします。
これが正しい方法かどうか分からないので、もっといい方法をご存知の方はぜひ教えて下さい。

##参考
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。 - Qiita : http://qiita.com/mochizukikotaro/items/a0e98ff0063a77e7b694

Manifest Merger - Android Studio Project Site : http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

Android Studio(Gradle)でapkファイルを作成する時にstorePassword/keyAlias/keyPasswordの指定方法をいくつか検証してみた。 - Qiita : http://qiita.com/shiraji/items/8f55b5295094487ce71a

AndroidStudioに環境変数を渡す - Qiita : http://qiita.com/tmiyamon/items/ed660dff7846f5ec95d3

20
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?