概要
シミュレーターで動作するまでにいろいろとエラーを解消する必要があったのでメモしておきます
正直出過ぎるので都度対応するのが面倒な場合は一から書き直したほうが最新のプロジェクト構成にもなるので良いかなと思います
環境
- macOS 14.4
- Android Studio Iguana
- コード最終コミット 2018/10/2
gradle plugin のバージョンの指定
エラー
A problem occurred evaluating project ':app'.
解決方法
build.gradle で gradle のバージョン部分を修正する
File -> Project Structure -> Project からでも OK
agp_version = '8.3.1'
distributionUrlの設定
エラー
Minimum supported Gradle version is 8.4. Current version is 8.2.
解決方法
./gradle/wrapper/gradle-wrapper.properties を作成し以下を記載する
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
namespace の指定がない
エラー
Namespace not specified. Specify a namespace in the module's build file.
解決方法
app/build.gradle への namespace ディレクティブの追加
android {
namespace "com.example.myapp"
Suggestions のアップデート
エラー
解決方法
File -> Project Structure -> Suggestions から表示されている Update を適用すれば OK
この段階で gradle ビルドは成功した
以下は実行時に発生したエラーへの対処方法
AndroidX へのマイグレーション
エラー
Caused by: com.android.builder.errors.EvalIssueException: Configuration `:app:debugRuntimeClasspath` contains AndroidX dependencies, but the `android.useAndroidX` property is not enabled, which may cause runtime issues.
解決方法
./gradle.properties の作成と以下の追記
android.useAndroidX=true
android.enableJetifier=true
コードの AnroidX へのマイグレーション
エラー
import android.support.v7.app.AppCompatActivity
がないなどのエラー多数
解決方法
なぜか Iguana には Migrate to AndroidX の機能がないので shell スクリプトを使う
#!/usr/bin/env bash
# I've found that the "Migrate to AndroidX" converter in Android Studio doesn't work very
# well, so I wrote my own script to do the simple job of converting package names.
#
# You can download a CSV of package names here: https://developer.android.com/topic/libraries/support-library/downloads/androidx-class-mapping.csv
#
# It'll run faster on a clean build because then there are fewer files to scan over.
#
# Uses `gsed` because I'm on a Mac. Can easily replace with `sed` if you don't have `gsed`.
#
# This isn't perfect; it won't find every conversion issue. You break it you buy it. Viewer discretion is advised.
MAPPING_FILE=~/Downloads/androidx-class-mapping.csv
PROJECT_DIR=~/data/repo/android-fndic
replace=""
while IFS=, read -r from to
do
replace+="; s/$from/$to/g"
done <<< "$(cat $MAPPING_FILE)"
find $PROJECT_DIR \( -name "*.kt" -o -name "*.java" -o -name "*.xml" \) -type f -not -path '*/\.git*' -print0 | xargs -0 gsed -i "$replace"
package 定義の削除
エラー
Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported.
解決策
AndroidManifest.xml から package を削除
SDK バージョン修正
エラー
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
上記プラス指定のバージョンが小さすぎるという旨の英語のエラーが出たはず
解決策
app/build.gradle への minSdkVersion と targetSdkVersion の修正
minSdkVersion 21
targetSdkVersion 34
AndroidManifest.xml の activity に android:exported の追加
エラー
android:exported needs to be explicitly specified for element
解決策
android:exported="true"
google-services のアップデート
エラー
Type 'com.google.gms.googleservices.GoogleServicesTask' field 'quickstartFile'
解決策
build.gradle 修正
classpath 'com.google.gms:google-services:4.4.1'
mavenCentral()
コードリファクタ
エラー
error: package R does not exist
error: cannot find symbol addTestDevice
など
解決方法
基本はリファクタ機能を使えば OK
Admob に関しては参考サイトの URL の通りにバナー広告などを設置する
Admob 修正
エラー
Missing application ID. AdMob publishers should follow the instructions
解決方法
https://developers.google.com/admob/android/quick-start?hl=ja#import_the_mobile_ads_sdk
AndroidManifest.xml に APPLICATION_ID を追記する
Admonb 修正2
エラー
The ad unit ID can only be set once on AdView.
解決策
xml 側とコード側で2回広告IDをセットしている場合はどちらかを削除する
adView.setAdUnitId("ca-pub-xxx")
アプリビルド時の Signing の修正
エラー
Android App Bundle をアップロードするには、Play App Signing に登録している必要があります。
解決策
公開鍵と pepk.jar をダウンロードし秘密鍵を生成
秘密鍵は Google Play にアップロード
公開鍵 (encryption_public_key.pem) は Google Play からダウンロード可能
これを使ってアプリに Signing する
keystore がない場合は Android Studio で作成する
最後に
アプリのプロジェクトは常に最新バージョンに対応しておかないと大変なことになります
参考サイト