Edited at

AndroidStudio3.0でとりあえずビルド通す

More than 1 year has passed since last update.

こんにちは。

体育会系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こずつ問題を潰していきました。


以下、チェックポイント



  1. buildToolsVersion26.0.2以上にしているか?(しなきゃダメなんですって)


  2. build.gradledependenciescompileimplementationにしたか?(しなきゃダメなんですって)


  3. build.gradledependenciescompileimplementationにしちゃダメなやつまでimplementationにしちゃってないか?(Android的なライブラリimplementationJava的なライブラリcompileのまんまにする※)


  4. 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からは

productFlavorsdimensionっていうのを書かなきゃいけなくなった、っていう話だそうです。

複数のパターンを組み合わせたい時だけ書けばいいのかと思いきや

そんなことしない場合にも書かなきゃダメだそうです。

ダメだった例

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ざーっと見ると、イケた例の方で書こうね、が多い気がします。)

とりあえずハマったのはこんなところです。

思い出したらまた足します!