2016年頃まで自作のAndroidアプリを作って、
Google Play
に公開していました。
2021年の某日。突然Googleから
「ご対応のお願い: Google Play のポリシーをアプリが遵守していません」
とのメールがきて、アプリがストアから削除されてしまいました。
最後のアプリのアップデートをしてから5年も経って、突然こうなったということは、
Google Play側のデベロッパープログラムポリシーの変更に追随できておらず放置していたということが原因
と考えられます。
幸い、ポリシーに違反していた部分は軽微だったので修正自体は難しくなさそうです。
ポリシー違反部分を修正して再アップすればよいのですが、なんせ5年も前なので、開発環境を整えていたPCは手放してしまったし、アプリのビルドやストアへの公開方法も忘れてしまっている状態です。
残っているのはzipで固められた当時のソースコードのみ。
ということで、開発環境を構築して、アプリをビルドしようとしたのですが、いろんなエラーに遭遇してなかなか成功しません。
ここにビルドエラーと格闘した話を、自身の備忘録も兼ねて載せておきます
私はWindows10を使っているので、手順はWindows前提になります。
まずは、
Android Studio
をダウンロードして、PCにインストールします。
Android Studioが起動したら「Tools>SDK Manager」からSDKを導入します。
私の場合は、2016年頃に最後にアプリのアップデートをしたときに使っていたAndroid 6.0(API Level 23)と、2021年時点で比較的使っている人が多いと思われるAndroid 11.0(API Level 30)を選択しました。
新しいバージョンのものを選べば、Android側で対応した新しい機能が使えたりするのですが、一方で下位互換性が省かれている場合もあるので、
単純に一番新しいものを選べばよいわけではない
と考えたほうがよいと思います。
AVDはAndroid Virutual Deviceの略称です。
PC上でAndroidの端末をエミュレートしてアプリの動作確認をするときに使います。
Android Studioの「Tools>AVD Manager」からAVDを導入できます。
私はPixel 5を使っていることもあり、Pixel 5のVirtual Deviceを選択しました。
ご自身で動作確認したい端末を、「Create Virutual Device」から作成しましょう。
これで、以下のようにPixel 5のエミュレータをPCで起動することができました。
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のバージョンを合わせる必要があるようです。
以下のようにバージョンを指定します。
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が出ているものを更新したらうまくいきました。
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. 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 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」を選択してウィザードを進めるだけです。
できあがった、apkとaabを比較すると、aabのほうが若干サイズが小さくなっています。
これでGoogle Play Consoleからストアにアップロードできる状態まで持っていけました。
ということで半日ほどかかりましたが、なんとかストアに更新版をアップロードして、無事アプリの公開が再開されました。
正直、アプリ自体は旬を過ぎており、最近はほぼダウンロードされていません。
それでも、自作アプリは自分の作品みたいなものなので、ストアに残せるように最低限のアップデートはしていきたいと思います。
参考サイト
https://stackoverflow.com/questions/51960049/android-build-error-unable-to-load-javax-xml-bind-jaxbexception
https://teratail.com/questions/215383
https://cpoint-lab.co.jp/article/201801/1040/
https://zesys.net/pc/android/android-studio-debug/
https://qiita.com/takahamarn/items/dfc9f44c9591fd3780c7
https://apprili.com/2019/02/18/versioncode%E3%81%A8versionname%E3%81%AE-%E9%81%95%E3%81%84/