プロジェクトをAndroid Studio 3.0 PreviewおよびGradle 4.0-milestone-1に転送する際に直面したこと

新しいAndroid Studio 3.0 PreviewGradle 4.0-milestone-1が Google IO 2017 Keynoteで発表された後、もちろん、すぐにかゆみがありました。 最初のものが多くの興味深い機能を取得した場合、2番目のものはAPIを大幅に変更しました。







したがって、現在のアプリケーションをこれらのイノベーションに変換するときに遭遇したことを簡単に共有したいと思います。 これは、ある種の一般的なチュートリアルやすべての利点の概要ではありません。 これは、特定のプロジェクトについてLiveTypingで個人的に遭遇した問題の段階的なリストです。









すぐに、プロジェクト内の依存関係と、発生する可能性のある問題をリストします。









ステップ1



古いAndroid Studio 2.3の代わりにではなく、その隣にAndroid Studio 3.0 Previewをインストールすることをお勧めします。 苦い経験があり、カナリアチャンネルからの更新をすぐにやめました。 Android Studio 2.2 Preview 1にアップデートすると、スタジオがランダムクラッシュし始め、最後の2〜5分間の作業を保存できなかった幸運な人の1人になれたことは幸運でした。 それは繰り返されました-まったくではなく、プレビュー6まで扱われませんでした。ロールバックは助けになりませんでした。







ステップ2



新しいスタジオでプロジェクトを開始すると、すぐにメッセージが表示されます







画像







すぐに同意するか、私たちの手ですべてを行う







%PROJECT%/gradle/wrapper/gradle-wrapper.properties



置き換えます







 distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
      
      











 distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip
      
      





%PROJECT%/build.gradle



置換







 buildscript { dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' } }
      
      











 buildscript { dependencies { + classpath 'com.android.tools.build:gradle:3.0.0-alpha1' } }
      
      





ただし、ここには微妙な違いがあります。 Android Studioは、 android gradle plugin 3.0.0-alpha1



をダウンロードするためのリポジトリをまだ追加していません。 したがって、いずれにしても、手作業で行う必要があります。 %PROJECT%/build.gradle



追加します







 buildscript { repositories { maven { + url 'https://maven.google.com' } }
      
      





ステップ3



プロジェクトを同期した後、新しいエラーが表示されました







画像







画像







これは、私たちにとって便利な形式でapkファイルの名前を変更したsamopisnyタスクです。

新しいアンドロイドgradleプラグインの移行手順に移動し、一番下に次のように表示されます







 API change in variant output Using the Variant API to manipulate variant outputs is broken with the new plugin. If you're using this API with the new plugin, you'll see the following error message: Error:(41, 0) Not valid. This build error occurs because variant-specific tasks are no longer created during the configuration stage. This results in the plugin not knowing all of its outputs up front, but it also means faster configuration times. As an alternative, we will introduce new APIs to provide similar functionality.
      
      





行き先はありません。タスク全体をコメントアウトして、そのように生きてください。 新しいAPIが登場するのを待っています。







後で、apkファイルが以前のように%PROJECT%/app/build/outputs/apk/



配置されず、 %PROJECT%/app/build/outputs/apk/



タイプとフレーバーの個別のディレクトリが作成されることがわかります。 私たちの場合、これらは2つのカタログです







 %PROJECT%/app/build/outputs/apk/debug %PROJECT%/app/build/outputs/apk/release
      
      





そして、それぞれに2つのファイルがあります。







 app-debug.apk output.json
      
      





最初のものですべてが明確な場合、2番目のファイルの内容は興味深いです







 [ { "outputType": { "type": "APK" }, "apkInfo": { "type": "MAIN", "splits": [], "versionCode": 10000 }, "outputFile": { "path": <FULL_APK_PATH> }, "properties": { "packageId": <YOUR_PACKAGE_NAME>, "split": "" } } ]
      
      





すばらしい、apload apkファイルを自動化するために使用できます。







ステップ4



プロジェクトの次の同期後、次のメッセージが表示されます







画像







 Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:generateDebugAndroidTestSources] Warning:The Jack toolchain is deprecated and will not run. To enable support for Java 8 language features built into the plugin, remove 'jackOptions { ... }' from your build.gradle file, and add android.compileOptions.sourceCompatibility 1.8 android.compileOptions.targetCompatibility 1.8 Future versions of the plugin will not support usage of 'jackOptions' in build.gradle. To learn more, go to https://d.android.com/r/tools/java-8-support-message.html Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle: apply plugin: 'me.tatarka.retrolambda' To learn more, go to https://d.android.com/r/tools/java-8-support-message.html Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle: apply plugin: 'me.tatarka.retrolambda' To learn more, go to https://d.android.com/r/tools/java-8-support-message.html
      
      





一般的に、ここには2つの投稿があります







a。 The Jack toolchain is deprecated



あり、その言及を完全に削除する必要があります。

これは確かにそうであることを思い出し、ファイル%PROJECT%/app/build.gradle



からjackOptionsを削除します







 android { defaultConfig { - jackOptions { - enabled false - } } }
      
      





b。 新しいAndroid Studio 2.4 Preview はJava8を部分的にサポートしており 、Retrolambdaは不要になりました。 移行に関する推奨事項に従って、プロジェクトから削除します。







ファイル%PROJECT%/build.gradle









 buildscript { dependencies { - classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' - classpath 'me.tatarka:gradle-retrolambda:3.3.0' - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } - // Exclude the lombok version that the android plugin depends on. - configurations.classpath.exclude group: 'com.android.tools.external.lombok' }
      
      





%PROJECT%/app/build.gradle









 - apply plugin: 'me.tatarka.retrolambda'
      
      





Java8サポートがまだ追加されていない場合は追加します







 android { compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } }
      
      





ステップ5



新しいGradle APIに従って、 依存関係の構成を置き換えます







 compile -> implementation provided -> compileOnly
      
      





また、より良い理解のために







 debugCompile -> debugImplementation releaseCompile -> releaseImplementation debugProvided -> debugCompileOnly releaseProvided -> releaseCompileOnly testCompile -> testImplementation androidTestCompile -> androidTestImplementation
      
      





まあ、何か、あなたのビルドタイプとフレーバーに応じて。







ステップ6



プロジェクトの前半で、aptプラグインをannotationProcessorに置き換えました。 %PROJECT%/build.gradle



すべてのandroid-apt



言及を削除しました







 buildscript { dependencies { - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } }
      
      





そして、 %PROJECT%/app/build.gradle









 - apply plugin: 'com.neenbedankt.android-apt'
      
      





に応じて交換







 apt -> annotationProcessor
      
      





その後、対応するライブラリ(Dagger2、StorIO、AutoValue、Butterknife、Timber、Moxyなど)のリポジトリを修正し、それらの依存関係のアドレスを完全に置き換える必要があります。 ただし、ここでは、非常に便利なIcePickライブラリに関する 1つの解決できない問題に直面しました。残念なことに、 annotationProcessorおよびKotlinはサポートされていません。







画像







ただし、Evernoteのユーザーは、類似のAndroid-Stateライブラリを作成しました。そのSNAPSHOTバージョンは素晴らしい仕事をし、IcePick APIに似たAPIを持っています。







 repositories { jcenter() maven { + url 'https://oss.sonatype.org/content/repositories/snapshots/' } } dependencies { + implementation 'com.evernote:android-state:1.1.0-SNAPSHOT' + annotationProcessor 'com.evernote:android-state-processor:1.1.0-SNAPSHOT' }
      
      





ステップ7



そして最後に、別の驚きが私たちを待っていました







画像







すぐにmultidexに何らかの問題があるように見えるかもしれません。 実際、問題は使用しているdexcount-gradle-pluginにあることが判明しました。 プラグインページで次のメッセージが表示されました。







 NOTE: dexcount does not currently work with the new Android Build Tools as of 3.0.0-alpha1; it has removed APIs that we depend on and, while replacements have been promised, none have yet been provided.
      
      





さて、今のところ、このプラグインの使用についてコメントし、編集を待っています。







まとめ



これは、プロジェクトが正常に終了した最後のアイテムでした。 これはかなり特殊なケースですが、移行の問題をすばやく理解するのに役立つ人がいるかもしれません。 近い将来に新しいスタジオとGradleを試す予定がある場合、またはリリースを待つ予定がある場合は、コメントを書いてください。 どのような問題に遭遇しましたか?







便利なリンク:







  1. Android Studio 3.0プレビュー1
  2. 新しいAndroidプラグインの移行
  3. Java8サポート
  4. Java8言語機能サポートの更新



All Articles