こんにちは。
体育会系Androidエンジニアdeath.
AndroidStudioのビルドやっとこさ通ったので記念に書きまーす。
ちなみに、ビルドは
個人的には早くなった感じあんまりしないっす。
最も苦労したトラップ
どこかをいじってsyncボタンクリックするたびに
androidstudio3.0 Error:Could not get unknown property `variant Output Data` for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=productionDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
とにかく何度もコイツが登場する・・・
このエラーを普通に解釈すると
build.gradleにスクリプト的なの書いて
apk吐き出させる時とかに使うアレですよ。
書いている人がいらっしゃいましたので貼らせて頂きますね。
https://qiita.com/yamacraft/items/301f188b2433f47669ee
こういうapkの吐かせ方してる場合は↑この対応必要だそうです。
でも違うんです。
長尾のプロジェクトこんなん採用してないし。
variant Output Dataとか言われても身に覚えないし。
なんでこのエラー出るのか意味不明。
原因
明確にはわからず終いです。
やった感じとしては
公式サイトにあるAndroidStudio3.0対応の手順
https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html
にあるのに、やってないことがあったりすると上記エラーが出るっぽい。
ということで、公式読んでバッチリ理解デキてる人はハマらないのかもですね。
で、このエラーが出ても、syncボタンじゃなくて、Terminalで
./gradlew assembleDebug
的なコマンド叩くと(プロジェクトのFlavorとかによって、このコマンドは微妙に違ったりします)
syncボタン押した時は出てこなかったエラーが出てきたりするので
こっちも使いながら1こずつ問題を潰していきました。
以下、チェックポイント
- buildToolsVersionを26.0.2以上にしているか?(しなきゃダメなんですって)
- build.gradleのdependenciesのcompileをimplementationにしたか?(しなきゃダメなんですって)
- build.gradleのdependenciesのcompileをimplementationにしちゃダメなやつまでimplementationにしちゃってないか?(Android的なライブラリはimplementation、Java的なライブラリはcompileのまんまにする※)
- Retrolambdaを消せ(Retrolambda関連の記述をbuild.gradleからなくす)
※ちなみに
3
なんですが
最終的にビルド通ってみたら
compile
がついているのは、自分は一つもない状態になりました。
compile xxx.xxx....
にしてるやつは何度かビルドしている段階で
annotationProcessorにしてよ
とか
compileOnlyにしてよ
とか
ピンポイントでお叱りメッセージが出たので
慎んでその通りにいたしました。
dimention系のエラー
android All flavors must now belong to a named flavor dimension.
AndroidStudio3.0からは
productFlavorsにdimensionっていうのを書かなきゃいけなくなった、っていう話だそうです。
複数のパターンを組み合わせたい時だけ書けばいいのかと思いきや
そんなことしない場合にも書かなきゃダメだそうです。
ダメだった例
android {
......
......
defaultConfig {
......
......
}
......
flavorDimensions "default"
productFlavors {
production {
dimension "default"
}
staging {
dimension "default"
versionName "${VERSION_NAME}-stg"
applicationIdSuffix ".staging"
}
}
}
イケた例
android {
......
......
defaultConfig {
......
......
flavorDimensions "default"
}
......
productFlavors {
production {
dimension "default"
}
staging {
dimension "default"
versionName "${VERSION_NAME}-stg"
applicationIdSuffix ".staging"
}
}
}
公式ではダメだった例な書き方してるので
もしかしてダメだった例の書き方でもイケる場合があるのかもです。
(StackOverflowざーっと見ると、イケた例の方で書こうね、が多い気がします。)
とりあえずハマったのはこんなところです。
思い出したらまた足します!