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

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

// app/build.gradle

compileSdkVersion 25
buildToolsVersion 25.0.3
minSdkVersion 9
tartgetSdkVersion 25Code language: JavaScript (javascript)

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

$ ./gradlew clean

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.3'.Code language: JavaScript (javascript)

プロジェクトの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:$PATHCode language: JavaScript (javascript)

ビルド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-androidCode language: JavaScript (javascript)

見たこともないエラーが。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'Code language: JavaScript (javascript)

ビルド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:unspecifiedCode language: JavaScript (javascript)

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.zipCode language: JavaScript (javascript)

ビルド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 :Code language: JavaScript (javascript)

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.gradleCode language: JavaScript (javascript)

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.3Code language: JavaScript (javascript)

ビルド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.Code language: JavaScript (javascript)

リリース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 = newNameCode language: PHP (php)

ビルド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'
Code language: JavaScript (javascript)

ビルド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)Code language: PHP (php)

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

// app/build.gradle

minSdkVersion 9
↓
minSdkVersion 14Code language: JavaScript (javascript)

ビルド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.Code language: JavaScript (javascript)

いろいろエラーが...

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'Code language: JavaScript (javascript)

ビルド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;
                             ^
  シンボル:   クラス ActionBarActivity
  場所: パッケージ android.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);
        ^
  シンボル:   変数 super
  場所: クラス RandomDealShuffleActivity
/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);
        ^
  シンボル:   メソッド setContentView(int)
  場所: クラス RandomDealShuffleActivity
/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);
        ^
  シンボル:   メソッド getMenuInflater()
  場所: クラス RandomDealShuffleActivity
/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);
                                  ^
  シンボル:   メソッド getApplicationContext()
  場所: クラス RandomDealShuffleActivity
/home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:40: エラー: シンボルを見つけられません
            startActivity(i);
            ^
  シンボル:   メソッド startActivity(Intent)
  場所: クラス RandomDealShuffleActivity
/home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:44: エラー: シンボルを見つけられません
        return super.onOptionsItemSelected(item);
               ^
  シンボル:   変数 super
  場所: クラス RandomDealShuffleActivity
/home/aoki/projects/ninton.co.jp/ShuffleNavi/ShuffleNavi/app/src/main/java/jp/co/ninton/shufflenavi/activity/RandomDealShuffleActivity.java:49: エラー: シンボルを見つけられません
        super.onStart();
        ^
  シンボル:   変数 super
  場所: クラス RandomDealShuffleActivity
/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();
        ^
  シンボル:   変数 super
  場所: クラス RandomDealShuffleActivity
/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個Code language: JavaScript (javascript)

同じく大量のエラー。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'Code language: JavaScript (javascript)

ビルド13回め

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

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