新しいAndroid Studio 3.0 PreviewとGradle 4.0-milestone-1が Google IO 2017 Keynoteで発表された後、もちろん、すぐにかゆみがありました。 最初のものが多くの興味深い機能を取得した場合、2番目のものはAPIを大幅に変更しました。
したがって、現在のアプリケーションをこれらのイノベーションに変換するときに遭遇したことを簡単に共有したいと思います。 これは、ある種の一般的なチュートリアルやすべての利点の概要ではありません。 これは、特定のプロジェクトについてLiveTypingで個人的に遭遇した問題の段階的なリストです。
すぐに、プロジェクト内の依存関係と、発生する可能性のある問題をリストします。
- 適切な
- レトロラムダ
- Rxjava2
- ダガー2
- レトロフィット2
- Okhttp3
- バターナイフ
- モクシー
- ストーリオ
- アイスピック
- AutoValue
- GooglePlayServices
- 書道
ステップ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を試す予定がある場合、またはリリースを待つ予定がある場合は、コメントを書いてください。 どのような問題に遭遇しましたか?
便利なリンク: