7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Android Studioでビルドエラーと格闘する

Posted at

はじめに

2016年頃まで自作のAndroidアプリを作って、Google Playに公開していました。
2021年の某日。突然Googleから**「ご対応のお願い: Google Play のポリシーをアプリが遵守していません」**とのメールがきて、アプリがストアから削除されてしまいました。
最後のアプリのアップデートをしてから5年も経って、突然こうなったということは、Google Play側のデベロッパープログラムポリシーの変更に追随できておらず放置していたということが原因と考えられます。
幸い、ポリシーに違反していた部分は軽微だったので修正自体は難しくなさそうです。
ポリシー違反部分を修正して再アップすればよいのですが、なんせ5年も前なので、開発環境を整えていたPCは手放してしまったし、アプリのビルドやストアへの公開方法も忘れてしまっている状態です。
残っているのはzipで固められた当時のソースコードのみ。

ということで、開発環境を構築して、アプリをビルドしようとしたのですが、いろんなエラーに遭遇してなかなか成功しません。
ここにビルドエラーと格闘した話を、自身の備忘録も兼ねて載せておきます

開発環境のセットアップ

Android Studioのインストール

私はWindows10を使っているので、手順はWindows前提になります。
まずは、Android Studioをダウンロードして、PCにインストールします。

Android SDKの導入

Android Studioが起動したら「Tools>SDK Manager」からSDKを導入します。
私の場合は、2016年頃に最後にアプリのアップデートをしたときに使っていたAndroid 6.0(API Level 23)と、2021年時点で比較的使っている人が多いと思われるAndroid 11.0(API Level 30)を選択しました。
新しいバージョンのものを選べば、Android側で対応した新しい機能が使えたりするのですが、一方で下位互換性が省かれている場合もあるので、単純に一番新しいものを選べばよいわけではないと考えたほうがよいと思います。

sdk.png

AVDの導入

AVDはAndroid Virutual Deviceの略称です。
PC上でAndroidの端末をエミュレートしてアプリの動作確認をするときに使います。
Android Studioの「Tools>AVD Manager」からAVDを導入できます。
私はPixel 5を使っていることもあり、Pixel 5のVirtual Deviceを選択しました。
ご自身で動作確認したい端末を、「Create Virutual Device」から作成しましょう。

avd.png

これで、以下のようにPixel 5のエミュレータをPCで起動することができました。

pixel5.png

ビルドエラーと格闘する

ここからが本題です。
「File>Open」から当時作成したプロジェクトファイルを開くも、開発環境の問題なのかなかなかビルドが成功しません。

Unsupported Gradle

Unsupported Gradle. 
The project uses Gradle 2.10 which is incompatible with Android Studio 2020.3.

Possible solution:
 - Upgrade Gradle wrapper to 3.0 version and re-import the project

2016年時点とAndroid Studioのバージョンも違うし、Gradleのバージョンも違うしということでなんか怒られました。
とりあえずエラーメッセージのとおり、Gradle wrapperを3.0にアップデートしてみます。

Unable to start the daemon process.

The project uses Gradle 3.0 which is incompatible with Java 11 or newer.

Possible solution:
 - Upgrade Gradle wrapper to 4.8 version and re-import the project

しかしながら、まだアップデートしろと言われました。
ということで、Gradle wrapperを4.8にアップデートします。

Unable to load class 'javax.xml.bind.annotation.XmlSchema'

しかし、それでも以下のようにエラーがでます。

Unable to load class 'javax.xml.bind.annotation.XmlSchema'.

This is an unexpected error

いろいろ調べた結果、gradle build tool versionを上げるとよいということで、「File>Project Sturucture>Project」からバージョンを変更します。
公式サイトの情報によると、プラグインのバージョンと必要なGradleのバージョンを合わせる必要があるようです。
以下のようにバージョンを指定します。

gradle_ver.png

Could not find com.android.tools.build:gradle:7.0.3.

ここまできて、「File>Sync Project with Gradle File」を実施しますが、まだエラーがでます。

Could not find com.android.tools.build:gradle:7.0.3.
Searched in the following locations:
  - https://jcenter.bintray.com/com/android/tools/build/gradle/7.0.3/gradle-7.0.3.pom
If the artifact you are trying to retrieve can be found in the repository but without metadata in 'Maven POM' format, you need to adjust the 'metadataSources { ... }' of the repository declaration.
Required by:
    project :
Add google Maven repository and sync project
Open File

gradle 7.0.3が見つからないと言われます。
jcenterのリンクをクリックすると「403 Forbidden」が返ってきます。
どうやら**「JCenter リポジトリは、2021 年 3 月 31 日に読み取り専用になりました。」**ということみたいです。
ここで、build.gradleを編集して、googleのリポジトリから取得できるようにします。

build.gradle
buildscript {
    repositories {
        jcenter()
        google() //これを追加!!
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.3'
    }
}

allprojects {
    repositories {
        jcenter()
        google() //これを追加!!
    }
}

もう1回、「File>Sync Project with Gradle File」を実施すると、必要なgradleのファイルをダウンロードしはじめて、BUILD SUCCESSFULが表示されました。

A problem occurred evaluating project ':app'.

これでうまくいくかと思いきや、また別のエラーが出始めました。

A problem occurred evaluating project ':app'.
> Could not find method compile() for arguments [com.google.android.gms:play-services:9.2.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

広告表示で使っているGoogle Play Services(日本語では「Google Play開発者サービス」というらしい)が悪さをしているようです。
「File>Project Sturucture>Suggestions」で一通りwarningが出ているものを更新したらうまくいきました。

suggestion.png

AAPT: error: resource android:attr/colorError not found.

これで「Run>Run 'app'」でPC上のエミュレータで動くと思いきや、またエラーが。。そろそろ心が折れてきた。。

AAPT: error: resource android:attr/colorError not found.

app配下のbuild.gradleで、compileSdkVersionとbuildToolsVersionを編集すればよいらしい。

build.gradle
    compileSdkVersion 23
    buildToolsVersion "30.0.2"

The minSdk version should not be declared in the android manifest file.

また別のエラーが発生。

The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.
Remove minSdkVersion and sync project

どうやらAndroidManifest.xmlでminSdkVersionを定義するのは古いやり方らしく、正しくはbuild.gradleで定義すべきということらしい。
ということで、AndroidManifest.xmlからminSdkVersionの定義をコメントアウトします。

AndroidManifest.xml
    <!--
        <uses-sdk
            android:minSdkVersion="9"/>
    -->

ここまでやって、やっと「Run>Run 'app'」でPC上のエミュレータでアプリが起動しました。
私が持ってる端末をPCとUSBデバッグモードで接続し、Runしたらちゃんと端末でも起動できました。

あとは、AndroidManifest.xmlでVersionCodeとVersionNameを新しいものに書き換えます。
バージョンはもちろんアプリによって異なりますが、私は以下のルールでやっています。

  • VersionCode:ユーザーから見えないもの。整数で記述。アップデートのたびに+1する。
  • VersionName:ユーザーから見えるもの。メジャーバージョン・マイナーバージョンのルールを決めて変更する。
AndroidManifest.xml
    android:versionCode="8"
    android:versionName="1.3.2" 

そして、「Build>Generate Signed Bundle or APK」から、署名してapkファイルを作成します。
しかし、ここでまたエラーが発生。

Lint found fatal errors while assembling a release target.

これはググったら、Android Studioで署名付きAPK作成時にLintエラーが出た場合の対処法というQiitaの記事が引っかかり、記事のとおりapp配下のbuild.gradleを編集し、Lintチェックを外したらビルドに成功しました。

build.gradle
android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}

Google Playストアにアップロード

署名したapkファイルができたので、あとはストアにアップロードします。
ここで、Google Play Consoleを開いたところ、以下の記載がありました。

APK に代わり、Android App Bundle が Google Play で推奨している公開形式になりました

どうやら、2021年8月から、apkではなくAndroid App Bundle(拡張子:aab)を使うことが推奨されるようになったようです。
そこで、Android Studioから署名付きのapkではなくAndroid App Bundleを作成します。
「Build>Generate Signed Bundle or APK」から「Android App Bundle」を選択してウィザードを進めるだけです。

aab.png

できあがった、apkとaabを比較すると、aabのほうが若干サイズが小さくなっています。

apk_aab.png

これでGoogle Play Consoleからストアにアップロードできる状態まで持っていけました。

さいごに

ということで半日ほどかかりましたが、なんとかストアに更新版をアップロードして、無事アプリの公開が再開されました。
正直、アプリ自体は旬を過ぎており、最近はほぼダウンロードされていません。
それでも、自作アプリは自分の作品みたいなものなので、ストアに残せるように最低限のアップデートはしていきたいと思います。

参考サイト

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?