Android史上最も全gradleアップグレード3.0+問題まとめ(一)
6908 ワード
Android Gradle3.0は大きなバージョンのアップグレードで、アップグレードのメリットについては、ここではあまり言いません.直接乾かす.
アップグレード手順
現在、最新のgradleバージョンは3.2.0で、gradle-4.6-allに対応し、buildバージョン番号は28.2.2以上を必要としています.しかし28.2.2互換性には問題が多く、ここでは最新のものにアップグレードしません.
ここでは3.1.4にアップグレードしgradle 4.4,buildToolsVersionは27.03,targetSdkVarsion用27,compileSdkVarsion用27であった.
バージョン番号の変更
build.gradleファイル
gradle/wrapper/gradle-wrapper.propertiesファイル
app/build.gradleファイル
コンパイルを実行すると、さまざまなエラーが見つかります.次に、ゆっくり処理します.
問題の要約
1、outputFile
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
なぜならoutputFileは読み取り専用属性になっており、これ以上中に書くことはできません.ここではパッケージ名の変更方法を変更する必要があります.以下はこちらの修正です
元のコード:
次のように変更します.
2、incremental属性は廃棄し、設定を削除する必要がある
DSL element 'DexOptions.incremental' is obsolete and will be removed at the end of 2018.
incrementalプロパティは破棄され、設定を削除する必要があります
3、compile属性名変更
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
次のように変更します.
compile—>implementationまたはapi moduleに依存している場合はapiに変更する必要があります
testCompile—>testImplementationまたはtestApi
4、butterknife互換
Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration. - butterknife-7.0.1.jar (butterknife-7.0.1.jar)
この問題に対して、迅速な解決策がありますが、使用をお勧めしません.
gradle 3.0以降はこのプラグインの使用を推奨しないので、最新の使用方法を交換するのが望ましいです.以下のようにします.
ルートディレクトリのbuild.gradleファイルにこの文を追加します.
app/build.gradleに次を追加します.
しかし、このように変更すると、bindの使用方法は以前とは異なり、コードには間違いが表示されるに違いありません.
エラー:シンボルが見つかりません:クラスBindの場所:パッケージbutterknife
@Bind(R.id.et_employee_id)は@BindView(R.id.et_employee_id)に変更する必要があります
コードが変更に関連しすぎる場合は、最初の方法を使用します.
5、moduleに依存して導入されたパッケージが見つからない
Compilation failed; see the compiler error output for details.
エラー:パッケージcom.loopj.android.httpは存在しません
これは、依存するmoduleにimplementationを使用すると、プライマリmoduleがパッケージを見つけられず、apiを使用して公開できるためです.
変更する必要があります:
6、AAPT 2エラー
AAPT2 error: check logs for details
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
このエラーを報告する原因はたくさんありますが、結局はコード自体のエラーです.
多くの資料を参考にしたが、その一つの方法はgradle.properties androidを追加します.enableAapt 2=false、それから追加して、一部のプロジェクトは解決することができて、しかし一部のプロジェクトはやはり別の1つの間違いが現れます
これは、オプション「android.enableAapt 2」が破棄され、再使用されないためです.この警告を削除するには、「android.enableAapt 2=true」を使用します.2018年末に削除されます.
また、この設定も根本的に解決されていないのか、コードのエラーを見つけなければならないのか.
どうやって解決したのか、私のプロジェクトが28.2.2以上にアップグレードされたからこの問題が発生したことに気づきました.buildToolsVersionのバージョン番号を27.30に下げて、再コンパイルしてみましょう.そして完璧に通過しました.だから今は27.30のバージョンでいいです.最新のAS対応gradleは3.2.0ですが、buildToolsVersionバージョン番号は28.2.2以上であることが要求されていますので、3.1.4を使用したバージョンを選び、4.4に対応しました.
7、supportパッケージのクラスに問題が見つからない
エラー:シンボルが見つかりません:クラスKeyEventCompatの場所:パッケージandroid.support.v4.view
v 4パッケージは27.1.0の一部のクラスで見つからない可能性があるため、26.1.0に下げたり、代替クラスを探したりすることができます.
最後に私の構成を貼り付けます.
8、デバッグエラーInstant-Run
Installation failed with message Failed to establish session
次の2つの解決策をまとめます.
1.小米システムの携帯電話であれば、小米携帯開発者オプションの「miui最適化」オプションをオフにする
2.2.3を閉じたInstant-Runもこの問題を解決した.File---Settings---Build---Instant-Run---Enable Instant Run to hot swap code(チェックアウト)
上記の問題を効果的に解決することができる.
今直面している問題はこんなに多くて、後で続きます....
问题があったら交流を歓迎します....
機能業務については、Android史上最も全gradleアップグレード3.0+問題まとめを引き続きご覧ください(二)
アップグレード手順
現在、最新のgradleバージョンは3.2.0で、gradle-4.6-allに対応し、buildバージョン番号は28.2.2以上を必要としています.しかし28.2.2互換性には問題が多く、ここでは最新のものにアップグレードしません.
ここでは3.1.4にアップグレードしgradle 4.4,buildToolsVersionは27.03,targetSdkVarsion用27,compileSdkVarsion用27であった.
バージョン番号の変更
build.gradleファイル
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
....
}
allprojects {
repositories {
jcenter()
google()//
}
}
gradle/wrapper/gradle-wrapper.propertiesファイル
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
app/build.gradleファイル
android {
compileSdkVersion 27
buildToolsVersion 27.0.3
....
defaultConfig {
targetSdkVersion 27
....
}
}
//v4,v7 27.1.0
dependencies {
implementation("com.android.support:support-v4:27.1.0") {
exclude group:'com.android.support', module:'support-v4'
}
implementation("com.android.support:appcompat-v7:27.1.0") {
exclude group:'com.android.support', module:'appcompat-v7'
}
}
コンパイルを実行すると、さまざまなエラーが見つかります.次に、ゆっくり処理します.
問題の要約
1、outputFile
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
なぜならoutputFileは読み取り専用属性になっており、これ以上中に書くことはできません.ここではパッケージ名の変更方法を変更する必要があります.以下はこちらの修正です
元のコード:
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('debug.apk')) {
def fileName = "SFA_ .apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
次のように変更します.
applicationVariants.all { variant ->
variant.outputs.all {
if (outputFile != null && outputFile.name.endsWith('debug.apk')) {
outputFileName = "SFA_ .apk"
}
}
}
2、incremental属性は廃棄し、設定を削除する必要がある
DSL element 'DexOptions.incremental' is obsolete and will be removed at the end of 2018.
incrementalプロパティは破棄され、設定を削除する必要があります
dexOptions {
//incremental true //
...
}
3、compile属性名変更
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.umeng.analytics:analytics:6.1.2'
....
}
次のように変更します.
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
implementation 'com.umeng.analytics:analytics:6.1.2'
....
}
compile—>implementationまたはapi moduleに依存している場合はapiに変更する必要があります
testCompile—>testImplementationまたはtestApi
4、butterknife互換
Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration. - butterknife-7.0.1.jar (butterknife-7.0.1.jar)
この問題に対して、迅速な解決策がありますが、使用をお勧めしません.
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
}
gradle 3.0以降はこのプラグインの使用を推奨しないので、最新の使用方法を交換するのが望ましいです.以下のようにします.
ルートディレクトリのbuild.gradleファイルにこの文を追加します.
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
}
app/build.gradleに次を追加します.
dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
しかし、このように変更すると、bindの使用方法は以前とは異なり、コードには間違いが表示されるに違いありません.
エラー:シンボルが見つかりません:クラスBindの場所:パッケージbutterknife
@Bind(R.id.et_employee_id)は@BindView(R.id.et_employee_id)に変更する必要があります
コードが変更に関連しすぎる場合は、最初の方法を使用します.
5、moduleに依存して導入されたパッケージが見つからない
Compilation failed; see the compiler error output for details.
エラー:パッケージcom.loopj.android.httpは存在しません
これは、依存するmoduleにimplementationを使用すると、プライマリmoduleがパッケージを見つけられず、apiを使用して公開できるためです.
dependencies {
implementation fileTree(dir: 'libs', include: '*.jar')
implementation 'com.loopj.android:android-async-http:1.4.9'
}
変更する必要があります:
dependencies {
api fileTree(dir: 'libs', include: '*.jar')
api 'com.loopj.android:android-async-http:1.4.9'
}
6、AAPT 2エラー
AAPT2 error: check logs for details
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
このエラーを報告する原因はたくさんありますが、結局はコード自体のエラーです.
多くの資料を参考にしたが、その一つの方法はgradle.properties androidを追加します.enableAapt 2=false、それから追加して、一部のプロジェクトは解決することができて、しかし一部のプロジェクトはやはり別の1つの間違いが現れます
The option 'android.enableAapt2' isdeprecated and should not be used anymore.
Use 'android.enableAapt2=true' to removethis warning.
It will be removed at the end of 2018..
これは、オプション「android.enableAapt 2」が破棄され、再使用されないためです.この警告を削除するには、「android.enableAapt 2=true」を使用します.2018年末に削除されます.
また、この設定も根本的に解決されていないのか、コードのエラーを見つけなければならないのか.
どうやって解決したのか、私のプロジェクトが28.2.2以上にアップグレードされたからこの問題が発生したことに気づきました.buildToolsVersionのバージョン番号を27.30に下げて、再コンパイルしてみましょう.そして完璧に通過しました.だから今は27.30のバージョンでいいです.最新のAS対応gradleは3.2.0ですが、buildToolsVersionバージョン番号は28.2.2以上であることが要求されていますので、3.1.4を使用したバージョンを選び、4.4に対応しました.
7、supportパッケージのクラスに問題が見つからない
エラー:シンボルが見つかりません:クラスKeyEventCompatの場所:パッケージandroid.support.v4.view
v 4パッケージは27.1.0の一部のクラスで見つからない可能性があるため、26.1.0に下げたり、代替クラスを探したりすることができます.
最後に私の構成を貼り付けます.
ext {
minSdkVersion = 15
targetSdkVersion = 27
compileSdkVersion = 27
buildToolsVersion = '27.0.3'
supportVersion = '27.1.0'//
}
8、デバッグエラーInstant-Run
Installation failed with message Failed to establish session
次の2つの解決策をまとめます.
1.小米システムの携帯電話であれば、小米携帯開発者オプションの「miui最適化」オプションをオフにする
2.2.3を閉じたInstant-Runもこの問題を解決した.File---Settings---Build---Instant-Run---Enable Instant Run to hot swap code(チェックアウト)
上記の問題を効果的に解決することができる.
今直面している問題はこんなに多くて、後で続きます....
问题があったら交流を歓迎します....
機能業務については、Android史上最も全gradleアップグレード3.0+問題まとめを引き続きご覧ください(二)