生成AIでAndroidアプリを作成する
Contents
GoogleのGeminiとAndroid Studioを用いて、Androidアプリを作成しました。
Kotlinは全くの初心者なのですが、Kotlinで綺麗に動くプログラムを作れました。
従来の方法との比較
従来の方法
まず、Kotlinの勉強から始めます。入門書を買ってきて一通りやります。
どこまでやるかによりますが、入門・基礎・応用・ライブラリ、などに進みます。
- 入門編、基礎編、応用編、ライブラリ編
- 動画教材、ネット教材、など
その後、ネットや書籍を見ながら、おもむろにプログラミングを始めます。
- Kotlinの勉強
- プログラミング
- プログラム完成
生成AIの方法
まず、生成AIにプログラムを作ってもらいます。
その後、「Run」か「Rebuild」して、エラーコードを表示します。
エラー箇所をネットで調べて修正します。
- 生成AI:元プログラム作成
- 元プログラム修正
- プログラム完成
Gemini
GeminiはGoogleの生成AIです。以前は、Bardという名前でした。
プログラム作成
プロンプト
Geminiにプログラム作成を依頼します。以下、プロンプトの例です。
- 水準器のAndroidプログラムを教えてください
- 水準器のAndroidプログラム(import付き)を教えてください
- 水準器のKotlinプログラム(import付き)を教えてください
- など
※プロンプト:依頼内容を言葉にしたもの
Gemini作成プログラム
下記プログラムは、Geminiが作成したプログラムの一例です。
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.hardware.Sensor
import android.hardware.Sensor.TYPE_ACCELEROMETER
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.widget.TextView
class MainActivity : AppCompatActivity(), SensorEventListener {
private lateinit var sensorManager: SensorManager
private lateinit var accelerometer: Sensor
private lateinit var messageTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
messageTextView = findViewById(R.id.messageTextView)
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
//加速度センサー
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onSensorChanged(event: SensorEvent) {
val x = event.values[0]
val y = event.values[1]
val z = event.values[2]
val angle = Math.atan2(y, x) * 180 / Math.PI
messageTextView.text = "傾き: $angle 度"
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
// Not used in this example
}
override fun onDestroy() {
super.onDestroy()
sensorManager.unregisterListener(this)
}
}
ライセンス
「Gemini作成プログラム」の下の方に「ソース」の項目があります。
そこに、Geminiが参考にしたソースがありますので、それらの内容を確認します。
「Gemini作成プログラム」の内容に近い「ソース」をピックアップして、ライセンスに従います。
以下、今回、Geminiが作成したプログラムの「ソース」
Android Studio
Android Studioで、Gemini作成プログラムを動かして、バグを取り除きます。
最終的に、app-release.aabファイルを作成します。
- Gemini作成プログラム → app-release.aab
app-release.aabファイルの作り方の詳細は、別記事をご参照ください。
- 別記事:Androidアプリの作成方法
新規プロジェクトの作成
- 「File」-「New」-「New Project」
- Empty Views Activityを選択
- Project情報を入力
- Language:Kotlin
プログラム作成
MainActivity.ktに「Gemini作成プログラム」をコピー&ペーストします。
- Gemini作成プログラム → MainActivity.kt
プログラム実行
作成中のプログラムを「Run」もしくは「Rebuild Project」します。
- ▶ ← Runアイコン
- 「Build」-「Rebuild Project」
そうすると、エラーのあるのが何行目かとエラー内容が表示されます。
- プログラムの何行目
- エラーの内容
エラー内容をコピー&ペーストして、Google検索するとエラー関連情報が得られます。
エラー修正
Google検索したエラー関連情報を元に、プログラムのエラーを修正します。
activity_main.xmlの修正
ソース(MainActivity.kt)の以下でエラーがありました。
- class MainActivity内のprivate lateinit var messageTextView: TextView
- エラー内容:「見つからない」といっている・・・
ググルと直ぐに解決しました。
下図(activity_main.xml)の右側にあるidが、デフォルトではmainですがそれを修正しました。
- 修正:main → messageTextView
MainActivity.ktの修正
ソース(MainActivity.kt)にエラーが、残り3個あります。
これもググルりながら修正しました。
- 修正前:sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
- 修正後:sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
- 修正前:
//加速度センサー
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) - 修正後:
//加速度センサー
val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
if (accelerometer != null) sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL)
- 修正前:
val x = event.values[0]
val y = event.values[1]
val z = event.values[2] - 修正後:
val x = event.values[0].toDouble()
val y = event.values[1].toDouble()
val z = event.values[2].toDouble()
Google Play Console
aabファイル(app-release.aab)ができたので、それをGoogle Play Consoleにアップロードします。
Google Play Consoleの内部テストにアップロードすることで、手元のスマホで動作確認できます。
- app-release.aab → Google Play Console:内部テスト → スマホ:動作確認
aabファイルをGoogle Play Consoleにアップロードする詳しい解説は別記事をご参照ください。
- 別記事:Androidアプリの登録方法
今回作成した「水準器アプリ」は、手元のスマホで綺麗に動いています。
- Gemini作成プログラム → 修正 → 完成!
参考