地図アプリMapは既に日々利用している。しかし、今後とも、追加修正は行いたい。 スマホアプリ開発は初めての経験からこれまでは実機デバッグに時間をかけたため、 スマホのバッテリがかなり劣化した。
スマホのバッテリ使用をなるべく抑える方法も徐々に分かってきた。 実機デバッグ用に安価なスマホを購入することも考えたが、1、2年先にした方が良さそうである。
バッテリ劣化を気にせずデバッグするためには、AC電源ベースのパソコンに Android Studio 用の Androidエミュレータをインストールした方が良さそうである。
まずは LDPlayer9 または NoxPlayerを試すことにした。 少なくとも、実用に供することが判明するまでは、現地図アプリMapには手を付けず、 別アプリMapXとして、一から、作り直す。
急いで作るのではなく、ここで、Android Javaの学びなおしとする。現Mapアプリは時々ダウンする。 ログ出力を適宜増やして、この原因も突き止めたい。
Android 9.0/10.0/11.0/12.0/12L(APIレベル28~32)だけがインストールされている状態とした。
まずは、アプリMapのファイルをそのままコピーした。アイコンもコピーした。
これまではあまり意識していなかったが、gradleの書き方も学びなおしたい。
スマホ実機とエミュレータでは Androidのバージョンが異なるため、これまでとは異なる注意がいる。
1年ほど前のアプリGPSを動かそうとすると、次のエラーが出た。 一時、Android Studioをバージョンアップしていた。今は Dolphine に戻している。 これが関係しているかも知れない。 あるいは、Android 12L を超えるものを uninstall したことが関係しているかも知れない。
The project is using an incompatible version (AGP 7.4.2) of the Android Gradle plugin. Latest supported version is AGP 7.3.1 See Android Studio & AGP compatibility options.
いずれにせよ、build.gradle の 7.4.2 を 7.3.1 に変更するとコンパイルできた。 [build.gradle(Project:GPS)]
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false } task clean(type: Delete) { delete rootProject.buildDir }
一方、build.gradle(Module:GPS.app)は次のようになっている。 LDPlayer 9の場合、APIレベルは 28であるから、minSdk は問題ないが、 compileSdk、targetSdk 31 は Android 12 に当たる。 現スマホは Android 12 であるから問題ないが、LDPlayer 9(Android 9) でも問題ないのだろうか?
Android 9 と 12 では、使われる API が異なることがある。 プログラム上、Android のバージョンをチェックして、コードを変えることになる。 実機(Android 12)とLDPlayer 9(Android 9)では、実際に動作するコードは一部異なることになる。 Android 9にはない API、Android 12では使えない API は無視されるのであろう。 [build.gradle(Module:GPS.app)]
plugins { id 'com.android.application' } android { compileSdk 31 defaultConfig { applicationId "com.example.gps" minSdk 26 targetSdk 31 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'com.google.android.gms:play-services-location:19.0.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' }
それぞれ1回目は次のようにして、繋がった。 それぞれ予めエミュレータを起動しておく。
c:\map>cd C:\Users\hatad\AppData\Local\Android\Sdk\platform-tools C:\Users\hatad\AppData\Local\Android\Sdk\platform-tools>adb connect localhost:5555
LDPlayerの場合、Android Studioには emulator-5554 と表示される。
NoxPlayer(Android 12β版)の場合、2度目以降がうまく行かない。 ネット記事から次のようにしてみたが、上手くいかない。
D:\Program Files\Nox\bin>nox_adb connect localhost:62001 adb server version (41) doesn't match this client (36); killing... * daemon started successfully * unable to connect to localhost:62001: cannot connect to localhost:62001: 対象のコンピューターによって拒否されたため、接 続できませんでした。 (10061)