LoginSignup
2
2

More than 5 years have passed since last update.

WEB+DB Vol.88 のモバイル開発最前線のコードをCIに乗せる

Posted at

WEB+DB Vol.88に、Elixirの特集があったんで読みたくて買ったわけなんですね。で、まぁElixirの特集もそれなりに面白く、またMQTTとかの特集も結構良かったんですが、他の特集で「モバイル開発最前線」というのがあって、これはAndroidの開発環境回りのお話だったので、チラッとやってみるかと思ったんですが、色々手こずったのでこちらにログを。
(ちなみにAndroidは出たばかりの頃にチラッとやっただけでほぼ初心者です)

サンプルアプリケーション

https://github.com/yanayanalte/SampleAndroid
まず記事で紹介されているサンプルアプリケーションはこちらです。

おもむろに git clone してコンパイルを試みますが

git clone git@github.com:yanayanalte/SampleAndroid.git
cd SampleAndroid
./gradlew assembleDebug

:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72211Library
:app:prepareComAndroidSupportSupportV42211Library
:app:prepareComCrashlyticsSdkAndroidAnswers122Library
:app:prepareComCrashlyticsSdkAndroidBeta112Library
:app:prepareComCrashlyticsSdkAndroidCrashlytics232Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore232Library
:app:prepareIoFabricSdkAndroidFabric133Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig
[Fatal Error] :22:27: 要素タイプ"android:value"に関連付けられている属性"{1}"には、開始引用符が必要です。

FAILURE: Build failed with an exception.

* What went wrong:
Cannot read packageName from path/to/SampleAndroid/app/src/main/AndroidManifest.xml

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 16.873 secs

あえなく失敗します。
どうやらAndroidManifest.xmlandroid:valueがイカンとのことなので調べますと、fabricのAPI KEYの設定のようです。

Fabric

で、Fabric。Twitterが開発しているモバイルの開発プラットフォームというかクラッシュレポートとかをよろしくやってくれるようですが、こいつのAPI KEYがイカンと。

https://github.com/yanayanalte/SampleAndroid/blob/master/app/src/main/AndroidManifest.xml#L22

「XXXXXXXXXXX」という設定になっています。
fabric自体がよくわからないので、色々ググって、まずどうにかしてAPI KEYを手に入れる事に専念するわけですが、fabricにサインアップしても設定画面などは一向に出てこない。
設定画面から取れるという情報もあるが、そもそも以下の画面しか出てこない。

Gyazo

ので、取り敢えずAndroid Studioにプラグインを突っ込む事にする。
ここでsafariとかでやってるとプラグインのzipを勝手に解凍してしまうので注意。
基本的にはfabricのページの手順に沿ってインストール。
するとAndroidのアイコンの横にfabricのアイコンが現れる。

Gyazo

ので、これをクリックしてサインインして進める。

そして、サンプルアプリケーションをAndroid Studioで開いた状態からこのプラグインを起動させて進めていくと、以下のようにインストールするkitを選べとなる。

Gyazo

CrashlyticのUpdateをクリックすると、

Gyazo

こんな感じでAPI KEYを変更するぜ、と言われるのでApplyボタン(キャプチャでは見切れてますが)を押すとAndroidManifest.xmlが書き換わり、API KEYが取得できる。

$ vi ./app/src/main/AndroidManifest.xml
$ ./gradlew assembleDebug
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72211Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42211Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidAnswers122Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidBeta112Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlytics232Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore232Library UP-TO-DATE
:app:prepareIoFabricSdkAndroidFabric133Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest
Warning: /path/to/SampleAndroid/app/src/main/AndroidManifest.xml:25:1 Warning:
  Element uses-permission#android.permission.INTERNET at AndroidManifest.xml:25:1 duplicated with element declared at     AndroidManifest.xml:5:5
/path/to/SampleAndroid/app/src/main/AndroidManifest.xml:25:1 Warning:
  Element uses-permission#android.permission.INTERNET at AndroidManifest.xml:25:1 duplicated with element declared at     AndroidManifest.xml:5:5
:app:fabricGenerateResourcesDebug
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava
注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
:app:preDexDebug
:app:dexDebug
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
:app:zipalignDebug
:app:assembleDebug

BUILD SUCCESSFUL

Total time: 38.731 secs

めでたくビルド成功。

だがしかし

この企画はgithubにpushした上でのcircleCIでのビルドを前提としているはず。
API KEYをハードコーディングした状態でpushして良いはずがなかろう....。

ということで環境変数からうまく読み込む方法を調べる。

http://stackoverflow.com/questions/25700680/crashlytics-found-an-invalid-api-key#answer-25704532

安定のStack Overflow。
build.gradleに

manifestPlaceholders = [name: value]

とすれば

${name}

AndroidManifest.xmlから変数で読み込める模様。
今々ではFlavorは無視するので、/app/build.gradledefaultConfigにこのmanifestPlaceholdersを突っ込みます。

あとはbuild.gradleはそもそもgradleなので、こいつに環境変数から値が渡ればOK。

build.gradleからの環境変数の参照 - horie1024の日記

こちらによれば、

ORG_GRADLE_PROJECT_

がプレフィックスにつく環境変数はbuild.gradleからそのまま読み込める模様。
なので、

$ export ORG_GRADLE_PROJECT_FABRIC_API_KEY="YOUR KEY"
$ vi ./app/build.gradle

defaultConfig {
    ....略....
    manifestPlaceholders = [fabricApiKey: FABRIC_API_KEY]
}

$ vi ./app/src/main/AndroidManifest.xml
<meta-data
    android:name="io.fabric.ApiKey"
    android:value="${fabricApiKey}" />

というような感じにすればOK。
circleCIでも上記のようなORG_GRADLE_PROJECT_FABRIC_API_KEYのような環境変数を充ててやればOK。

2
2
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
2
2