筆者作成のShuffleNaviのtargetSdkVersionを25から26へアップデートしました。その作業メモです。
// app/build.gradle
compileSdkVersion 25
buildToolsVersion 25.0.3
minSdkVersion 9
tartgetSdkVersion 25
Code 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:$PATH
Code 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-android
Code language: JavaScript (javascript)
見たこともないエラーが。mipsel-linux-android は、MIPSのことですね。
注: これまで NDK は 32 ビットおよび 64 ビットの MIPS をサポートしていましたが、NDK r17 でこのサポートは削除されました。
https://developer.android.com/ndk/guides/abis?hl=ja
android-ndk / ndk > Changelog 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.
https://github.com/android-ndk/ndk/wiki/Changelog-r20
(Google翻訳)
このバージョンのNDKは、Android Gradleプラグインバージョン3.0以降とは互換性がありません。 NDK toolchainsフォルダにABIのプレフィックス:mips64el-linux-androidがないなどのエラーが表示される場合は、プラグインバージョン3.1以降を使用するようにプロジェクトファイルを更新してください。 また、Android Studio 3.1以降にアップグレードする必要があります。
"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:unspecified
Code 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.zip
Code 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.gradle
Code 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.3
Code 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 = newName
Code 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 14
Code 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に下げて、ようやく、ビルドできました。