この記事について
- 今更ですがCircleCIを個人プロジェクトに導入してみようかと始めてみました
- が、全然buildが通らなくて途方に暮れかかったものの
-
BuildConfigの作り方 (build.gradleの記述方法) が良くなかったのが原因でした、という話 - メモ程度のものなので雑ですがとりあえず残しておく
起きたこと
- 今回CircleCIを導入したプロジェクトは、TwitterなどのAPIキーを
gradle.propertiesに書くようにしてました -
この記事 を参考にし、
app/gradle.propertiesを 設定値から作成するbashスクリプトを作成 - ところが下記のエラーが起きてbuildが通らず
> Building 75% > :app:compileDebugJavaWithJavac/home/ubuntu/bbbbbb-android/app/build/generated/source/buildConfig/debug/pj/aaaa/bbbbb/BuildConfig.java:15: error: cannot find symbol
> Building 75% > :app:compileDebugJavaWithJavac public static final String TWITTER_CONSUMER_KEY = xxxxxxxxxxxxxxxxxxx;
> Building 75% > :app:compileDebugJavaWithJavac ^
> Building 75% > :app:compileDebugJavaWithJavac symbol: variable xxxxxxxxxxxxxxxxx
> Building 75% > :app:compileDebugJavaWithJavac location: class BuildConfig
> Building 75% > :app:compileDebugJavaWithJavac/home/ubuntu/bbbbbb-android/app/build/generated/source/buildConfig/debug/pj/aaaa/bbbbb/BuildConfig.java:16: error: cannot find symbol
> Building 75% > :app:compileDebugJavaWithJavac public static final String TWITTER_CONSUMER_SECRET = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
> Building 75% > :app:compileDebugJavaWithJavac
そこで
- testのコマンドに、下記を追加してBuildConfigを表示
cat app/build/generated/source/buildConfig/debug/pj/aaaa/bbbbb/BuildConfig.java
- そしたら、Stringのフィールドに "" が無い
public static final String TWITTER_CONSUMER_KEY = xxxxxxxxxxxxxxxx;
public static final String TWITTER_CONSUMER_SECRET = xxxxxxxxxxxxxx;
なぜ?
- build.gradleでは下記のようにbuildConfigFieldを書いていた
buildConfigField "String", "TWITTER_CONSUMER_KEY", TWITTER_CONSUMER_KEY_DEBUG
buildConfigField "String", "TWITTER_CONSUMER_SECRET", TWITTER_CONSUMER_SECRET_DEBUG
buildConfigField "int", "LOG_LEVEL", "3" // DEBUG
- そして、
gradle.propertiesを下記のように書いていた - 上記で触れた自動生成のscriptでも "" で挟むようにしてた
TWITTER_CONSUMER_KEY_DEBUG="xxxxxxxxxxxxxxxxx"
TWITTER_CONSUMER_SECRET_DEBUG="xxxxxxxxxxxxxxxxxx"
- どうやらlocal環境では、build.gradleの
TWITTER_CONSUMER_KEY_DEBUGが "" 込みで置き換わるらしい - ところが、CircleCIの上では、""が入らない (何が原因かは分からないが)
そこで
- build.gradleを下記のように書き換えた ("" で挟むようにした)
buildConfigField "String", "TWITTER_CONSUMER_KEY", "\"" + TWITTER_CONSUMER_KEY_DEBUG + "\""
buildConfigField "String", "TWITTER_CONSUMER_SECRET", "\"" + TWITTER_CONSUMER_SECRET_DEBUG + "\""
buildConfigField "int", "LOG_LEVEL", "3" // DEBUG
-
gradle.propertiesから ""を取った - 上記で触れた自動生成のscriptでも "" で挟むのをやめた
TWITTER_CONSUMER_KEY_DEBUG=xxxxxxxxxxxxxxxxx
TWITTER_CONSUMER_SECRET_DEBUG=xxxxxxxxxxxxxxxxxx
一応これで
- うごきました。