apiとimplementation の自メモ

動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 3.0 Canary1

はじめに

検証用の記事。あとで追記する予定


書き換えるにあたって参考にするといいと話題になってたスライド


高速化Tips1:最新pluginを使えの話

下記2つが Tips-1の言及内容根拠らしい。

こっちは、FlavorとかABI とかあんまり使わないのでアレかな・・とかは思う*1

ドキュメントにあまりちゃんと書いてないので、G様利用サンプル待ちかもな・・

dependenciesで apiとimplementation が宣言してくれという話

gradle runtime 3.5以上から android gradle plugin のベースになっている

java plugin の DSL にプロパティが追加されていて

そっちを使ったほうが、gradle runtimeの最適化対応に対応できるという話みたい。

そのサポートがAS3.0のpluginから対応するみたいな事のよう

The Java Library Plugin - Gradle User Guide Version 3.5

公式ドキュメント

Migrate to the New Plugin | Android Studio

らしい

エラーになってたファイル名変更タスク

  • app/build.gradle
android {

    applicationVariants.all { variant ->
        if (variant.buildType.name.equals("release")) {
            variant.outputs.each { output ->
                if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
                    // Rename APK
                    def applicationId = defaultConfig.applicationId
                    def versionCode = defaultConfig.versionCode
                    def versionName = defaultConfig.versionName
                    def date = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
                    def newName = "${applicationId}_r${versionCode}_v${versionName}_${date}.apk"
                    output.outputFile = new File(output.outputFile.parent, newName)
                }
            }
        }
    }

}

=>

  • app/build.gradle
android {
    android.applicationVariants.all { variant ->
        if (variant.buildType.name.equals("release")) {
            variant.outputs.all {
                  // outputFileName = "${variant.name}-${variant.versionName}.apk"
                  // Rename APK
                  def applicationId = defaultConfig.applicationId
                  def versionCode = defaultConfig.versionCode
                  def versionName = defaultConfig.versionName
                  def date = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
                  outputFileName = "${applicationId}_r${versionCode}_v${versionName}_${date}.apk"
             }
        }
    }
}

試行状況

これ自分も試してみたんだけど、結構厳しくて置き換え挫折した。

小さいプロジェクトならいいんですけどライブラリ使いまくっていると厳しいかな。

  • data-binding &APTてんこ盛り環境だと、
    • plugin差し替えだけで意味がわからないエラーが多発したので
  • 上記の記事に書いているように依存解決(exclude)辺にあたるものが不明なため
    • 依存ライブラリが重なるとエラー解消が無理

もうちょっと追跡調査が必要な気がする

TLメモ

というか、自分の環境だと

gradlew assembleXXX

系をすると駄目。つまりInstantRun OFFにするとビルド不可

さすがG様クオリティ・・

  • AS2.4p6あたりマージされているようなので、
    • 本来ならビルドできるんだろうけどなー
    • p7あたりがdata-binding(というかAPTの)ビルドが怪しかったのでそこら辺がマージされているのかも

*1:開発時にエミュだけ使うとかあんまりありえないし・・