16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

体育会系エンジニアAdvent Calendar 2017

Day 2

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

Last updated at Posted at 2017-11-01

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

とりあえずハマったのはこんなところです。
思い出したらまた足します!

16
11
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
16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?