トップ地図アプリMapX > 地図アプリMapXの基本設計

地図アプリMapXの基本設計

はじめに

地図アプリMapは既に日々利用している。しかし、今後とも、追加修正は行いたい。 スマホアプリ開発は初めての経験からこれまでは実機デバッグに時間をかけたため、 スマホのバッテリがかなり劣化した。

スマホのバッテリ使用をなるべく抑える方法も徐々に分かってきた。 実機デバッグ用に安価なスマホを購入することも考えたが、1、2年先にした方が良さそうである。

バッテリ劣化を気にせずデバッグするためには、AC電源ベースのパソコンに Android Studio 用の Androidエミュレータをインストールした方が良さそうである。

まずは LDPlayer9 または NoxPlayerを試すことにした。 少なくとも、実用に供することが判明するまでは、現地図アプリMapには手を付けず、 別アプリMapXとして、一から、作り直す。

急いで作るのではなく、ここで、Android Javaの学びなおしとする。現Mapアプリは時々ダウンする。 ログ出力を適宜増やして、この原因も突き止めたい。

アプリMapからの改善

  1. 国土地理院タイル画像の有効期限を1か月として、1か月を過ぎた場合、更新されていないか、チェックする。 更新されていた場合は、ダウンロードする。 更新されていない場合、ダウンロードされているファイルの更新時間を現在時刻に変更して、再び1か月後にチェックする。
  2. 再起動などにより、アプリの権限が変わることがある。アプリ起動時に権限をチェックする。 アプリMapではうまく機能していない。

開発手順

Android SDK

Android 9.0/10.0/11.0/12.0/12L(APIレベル28~32)だけがインストールされている状態とした。

AndroidManifest.xml

まずは、アプリMapのファイルをそのままコピーした。アイコンもコピーした。

gradle

これまではあまり意識していなかったが、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'
}

Android Studioからの起動

それぞれ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)

リファレンス

[1] Android studio の Gradleについて調べてみた
[2] compileSdk・minSdk・targetSdkの違い(Android)