android targetSdkVersionを25から26へアップデートした作業メモ(その1)

筆者作成のShuffleNaviのtargetSdkVersionを25から26へアップデートしました。その作業メモです。

// app/build.gradle compileSdkVersion 25 buildToolsVersion 25.0.3 minSdkVersion 9 tartgetSdkVersion 25

現状のまま、ビルド1回め

$ ./gradlew clean FAILURE: Build failed with an exception. * What went wrong: Could not determine java version from '11.0.3'.

プロジェクトのgradleが2.14.1と古いので、Ubuntu 18.04 の Java 11がわからない、というエラーのようです。~/.bashrcに追加設定して、Android Studio同梱のJava 1.8を参照するようにしました。

export JAVA_HOME=/snap/android-studio/current/android-studio/jre export PATH=$JAVA_HOME/bin:$PATH

ビルド2回め

$ ./gradlew clean Downloading https://services.gradle.org/distributions/gradle-2.14.1-all.zip FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':app'. > No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android

見たこともないエラーが。mipsel-linux-android は、MIPSのことですね。

注: これまで NDK は 32 ビットおよび 64 ビットの MIPS をサポートしていましたが、NDK r17 でこのサポートは削除されました。

https://developer.android.com/ndk/guides/abis?hl=ja

android-ndk / ndkChangelog r20 によると

This version of the NDK is incompatible with the Android Gradle plugin version 3.0 or older. If you see an error like No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android, update your project file to use plugin version 3.1 or newer. You will also need to upgrade to Android Studio 3.1 or newer.

(Google翻訳)
このバージョンのNDKは、Android Gradleプラグインバージョン3.0以降とは互換性がありません。 NDK toolchainsフォルダにABIのプレフィックス:mips64el-linux-androidがないなどのエラーが表示される場合は、プラグインバージョン3.1以降を使用するようにプロジェクトファイルを更新してください。 また、Android Studio 3.1以降にアップグレードする必要があります。

https://github.com/android-ndk/ndk/wiki/Changelog-r20

"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"のエラーが表示されたら、Gradle Plugin Version を 3.1以上にアップデートしてください、とのこと。

https://mvnrepository.com/artifact/com.android.tools.build/gradle?repo=google を見ながら、3.1.xの中で新しい 3.1.4を試します。

// project/build.gradle classpath 'com.android.tools.build:gradle:2.2.3' ↓ classpath 'com.android.tools.build:gradle:3.1.4'

ビルド3回目

$ ./gradlew clean .To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html. > FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'ShuffleNavi'. > Could not resolve all dependencies for configuration ':classpath'. > Could not find com.android.tools.build:gradle:3.1.4. Searched in the following locations: https://jcenter.bintray.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.pom https://jcenter.bintray.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.jar Required by: :ShuffleNavi:unspecified

gradle plugin 3.1.4が見つからないようです。

gradle pluginとgradle本体には対応関係があります。https://developer.android.com/studio/releases/gradle-plugin.html
plugin 3.1.0+ は、gradle 4.4以上が必要です。

https://services.gradle.org/distributions/
ここを見て、gradle 4.4.1 を試します。

./gradle/wrapper/gradle-wrapper.properties を次のように編集しました。

distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip ↓ distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip

ビルド4回め

$ ./gradlew clean FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'ShuffleNavi'. > Could not resolve all files for configuration ':classpath'. > Could not find com.android.tools.build:gradle:3.1.4. Searched in the following locations: https://jcenter.bintray.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.pom https://jcenter.bintray.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.jar Required by: project :

gradle plugin 3.1.4 が見つからない、とのことです。

別のプロジェクトと比較して、project/build.gradle に google()を追加しました。

buildscript { repositories { google() jcenter()

ビルド5回め

$ ./gradlew clean > Configure project :app WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html WARNING: The specified Android SDK Build Tools version (25.0.3) is ignored, as it is below the minimum supported version (27.0.3) for Android Gradle Plugin 3.1.4. Android SDK Build Tools 27.0.3 will be used. To suppress this warning, remove "buildToolsVersion '25.0.3'" from your build.gradle

compileは非推奨になり、implementationを使うように。SDK 25.0.3は古いから無視するよ、代わりに27.0.3を使ったよ、とのこと。

buildToolsVersionを27.0.3にして、compileをimplementationに置換しました。

// app/build.gradle buildToolsVersion 25.0.3 ↓ buildToolsVersion 27.0.3

ビルド6回め

$ ./gradlew clean FAILURE: Build failed with an exception. * Where: Build file '/home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/build.gradle' line: 45 * What went wrong: A problem occurred configuring project ':app'. > Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=release, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

リリースapkのファイル名にアプリidやversion_code、日時を含めて、jp.co.ninton.shufflenavi_r22_v1.7_2019-07-16-10-25-35.apk のようなファイル名にする処理を追加していますが、その処理でエラーです。

// app/build.gradle if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) { ↓ if (output.outputFileName != null && output.outputFileName.endsWith('.apk')) { output.outputFile = new File(output.outputFile.parent, newName) ↓ output.outputFileName = newName

ビルド7回め

ようやく、./gradlew assembleRelease が通りました。

ここからです。targetSdkVersion 25を26に、サポートライブラリを28.0.0にしてみます。

// app/build.gradle android { defaultConfig targetSdkVersion 26 dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0'

ビルド8回め

$ ./gradlew assembleRelease > Task :app:processReleaseManifest FAILED /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/AndroidManifest.xml Error: uses-sdk:minSdkVersion 9 cannot be smaller than version 14 declared in library [com.android.support:appcompat-v7:28.0.0] /home/aoki/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/9f8064f622386dc4b27214a8ce2adbfb/AndroidManifest.xml as the library might be using APIs not available in 9 Suggestion: use a compatible library with a minSdk of at most 9, or increase this project's minSdk version to at least 14, or use tools:overrideLibrary="android.support.v7.appcompat" to force usage (may lead to runtime failures)

minSdkVersion=14にしてくださいとのこと。

// app/build.gradle minSdkVersion 9 ↓ minSdkVersion 14

ビルド9回め

$ ./gradlew assembleRelease /home/aoki/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/9f8064f622386dc4b27214a8ce2adbfb/res/values-v28/values-v28.xml:9:5-12:13: AAPT: error: resource android:attr/dialogCornerRadius not found. /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-v28/values-v28.xml:11: AAPT: error: resource android:attr/dialogCornerRadius not found. /home/aoki/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/9f8064f622386dc4b27214a8ce2adbfb/res/values/values.xml:1304:5-69: AAPT: error: resource android:attr/fontVariationSettings not found. /home/aoki/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/9f8064f622386dc4b27214a8ce2adbfb/res/values/values.xml:1304:5-69: AAPT: error: resource android:attr/ttcIndex not found. error: failed linking references. FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:processReleaseResources'. > Failed to process resources, see aapt output above for details.

いろいろエラーが...

https://mvnrepository.com/artifact/com.android.support/appcompat-v7
を見ながら、バージョンを下げてみます。

implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1'

ビルド10〜12回め

$ ./gradlew assembleRelease > Task :app:compileReleaseJavaWithJavac FAILED /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:4: エラーラー: シンボルを見つけられません import android.support.v7.app.ActionBarActivity; ^ シンボル: クラスラス 場所: パッケージ.support.v7.app /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:17: エラーラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません @Override ^ /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:19: エラーラー: シンボルを見つけられません super.onCreate(savedInstanceState); ^ シンボル: 変数 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:20: エラーラー: シンボルを見つけられません setContentView(R.layout.activity_random_deal_shuffle); ^ シンボル: メソッド(int) 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:26: エラーラー: シンボルを見つけられません getMenuInflater().inflate(R.menu.menu_main, menu); ^ シンボル: メソッド() 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:39: エラーラー: シンボルを見つけられません Intent i = new Intent(getApplicationContext(), AboutActivity.class); ^ シンボル: メソッド() 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:40: エラーラー: シンボルを見つけられません startActivity(i); ^ シンボル: メソッド(Intent) 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:44: エラーラー: シンボルを見つけられません return super.onOptionsItemSelected(item); ^ シンボル: 変数 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:49: エラーラー: シンボルを見つけられません super.onStart(); ^ シンボル: 変数 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:51: エラーラー: 不適合な型: RandomDealShuffleActivityをContextに変換できません換できませんきません: FlurryAgent.onStartSession(this); ^ /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:58: エラーラー: シンボルを見つけられません super.onStop(); ^ シンボル: 変数 場所: クラスラス /home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:60: エラーラー: 不適合な型: RandomDealShuffleActivityをContextに変換できません換できませんきません: FlurryAgent.onEndSession(this); ^ 〜省略 注意:一部のメッセージは簡略化されていますージは簡略化されています略化されています-Xdiags:verboseで再コンパイルして完全な出力を取得してください エラー32個ー32個2個

同じく大量のエラー。27.0.2、26.1.0に下げても大量のエラー。

25.4.0に下げてみます。

implementation 'com.android.support:appcompat-v7:25.4.0' implementation 'com.android.support:support-v4:24.4.0'

ビルド13回め

サポートライブラリのバージョンを25.4.0に下げて、ようやく、ビルドできました。

タイトルとURLをコピーしました