8月読了

| トラックバック(0)

どうも。

保存用RITZを開封するか悩んでいます。 ハシモトです。

また、こちらなんですが、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.xmlのandroid: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.gradleのdefaultConfigにこの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でも上記のようなORGGRADLEPROJECTFABRICAPI_KEYのような環境変数を充ててやればOK。

それにしてもデベロッパーフレンドリーじゃないサンプルだったな...。

7月読了

| トラックバック(0)

6月読了

| トラックバック(0)

七回忌

| トラックバック(0)

6年が過ぎたようなので七回忌だった。
正確な日付ではもちろんないのだが、だいたいみんな毎年都合の良い日で集まる。
そう。だいたい。なんとなく。みんなで。

毎年同じメンバーが集まっているというわけではない。それはもちろんみなの都合がそれぞれ違うわけで、来られる人も来られない人も居るわけだからだ。メンバーがちょっとずつ違うことながらも、あの人の両親は毎回来る。そもそも集まる場所があの人の実家なので、それはそうだろうと思われるが、その両親は別れてしまっている。実家には父親が住んでいて、母親は来訪するわけである。

だいたいみんな時間通りには来ない。いつもの感じだ。この点はこの六年間変わらない。六年の間での変化は沢山ある。結婚した人もいるし子供を何人も産んで産まれた子もたまに一緒に連れられて来る。なかなか賑やかだ。

小さい子をあの人の両親にちょっと抱いておいてもらったりするときなどは、あの人の小さかった頃の話などが両親の口からたまにこぼれる。でもそんな話題ももう「たまに」だ。もともとあの人はみんなの輪の中心に居るタイプではない。傍から眺めてたまに鋭いツッコミを入れるような人だ。ここ数年はみなの話題にも登らない。そんなところは実にあの人らしい。

だいたい14時近辺から人が集まり始める。今もお墓には入っていない、その骨壷が、あの人が何年も使ったであろう勉強机の上に、大学の卒業式の写真を元にした遺影と共に置いてある。この六年、ほぼ変わることのない定位置だ。その定位置の前にある勉強机の椅子に座り、来る人が代わる代わる焼香をする。静寂。そしてなんとなしに長机が用意されて車座になり、麦酒などを飲み始める。父親の作ったサラダとローストビーフが出る。食べる。喰べる。たべる。お土産に持って来られたお菓子も開けられる。また食べる。みんなは他愛も無い話をする。仕事の話。子供の話。昔の話。

夕方を過ぎて、じゃあそろそろ、と言ってみなで片付けをし、玄関を出る。両親からは、いつも来てくれてありがとう、いつでもいらしてください、と言葉を掛けられる。こちらもありがとうございます、と言って玄関をあとにする。

だいたいのところはこの6年、変わらない。だいたいは。

ただみんな6年は歳を取り、あの人だけは何も変わっていない。

あの人がこの世を去ったことにより、なんとなしにみんなが集まる日が毎年あり、そしてあの人の両親とあの人の実家で食事をする。

そんなことを考えて、なんだかこれは是枝監督の映画みたいだなぁ、と思った。あの人が好きだった是枝監督。あの人はこんな風景を向こう岸からカメラを回しているかもしれないなぁ、なんて妄想する。そんな七回忌。