0️⃣

Androidアプリ開発の一歩目 ~プロジェクト編~

2023/06/06に公開

はじめに

本記事ではAndroidアプリを開発する方法,構成するファイルなどについて書きます.
本記事は2年前に書いた記事をZenn用に書き直しています.なので一部画像が古い場合があります.
"本記事ではプログラムに一切触れません"
"アプリのビルド,実行も行いません"

おすすめの本

Android Studio(アプリ開発のツール)のおすすめ設定などがあっていいと思います.

Android Studioをインストール

アンドロイドデベロッパーズ
↑このアンドロイドデベロッパーズ(Android developers)はAndroidアプリ開発でとてもお世話になります。

今のAndroid Studioのアイコンは,アンドロイドデベロッパーズの動画のアイコンとは違います.

プロジェクトを立ち上げる

では,インストールしたAndroid Studioを立ち上げましょう.

インストールした直後だと左側は何も書いてないと思います.
左側には直近に開いたプロジェクトが並びます.

右側にあるCreate New Projectを押して新規プロジェクトを立ち上げましょう.

テンプレートから選ぶ

次はいくつかのテンプレートの中から一つ選びます.
テンプレートをうまく使えば開発速度を早められます.

が,今回は何も入っていないEmpty Activityを選択しましょう.

プロジェクトの設定

  • 上から
    • アプリの名前
    • パッケージ
    • プロジェクトの保存場所
    • 言語
    • バージョン

バージョンとは

  • Help me choose をクリックしてみましょう.

現在大体何%の人がどのAndroidのバージョンを使ってるかがわかります.

minSDKというのがあります.
これは対象とするAndroid最小バージョンを決めます.

Androidのバージョンによってコードの書き方が変わったりします.
例えば
if (Androidのバージョンが30以下) {バージョン30以下の時のコード}
else {バージョンが31以上の時のコード}
この様に書いたりします.

しかし,全てのバージョンを網羅できません.
なのでminSDKというのを設定して,「このバージョン以下はそもそも対応しません!」というのを決めます.

で,minSDKを幾つに設定するとAndroidユーザの何%に対応できているのかをこの画面で確認できます.

プロジェクトの中身

左がプロジェクトツールウィンドウ、右がエディタウィンドウ

プロジェクトツールウィンドウのフォルダを開いてみましょう.

いくつかファイルがありますね.今,重要なのは5つあります.

Manifest マニフェスト

  • アプリが位置情報やネットを勝手に使ったら困る.
  • アプリがなんらかの権限が欲しい時にここに書く.
    • そして権限リクエストをすると”⚪︎⚪︎が位置情報の権限をリクエストしています”みたいのが出る.
  • あとアプリを開いた時どのクラスが一番最初に開くかをここに書く.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.k18054.helloandroid">

<!-- ここに欲しい権限をかく。-->
<!--    
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  
    例、↑外部ストレージアクセス権限
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
    例、↑位置情報権限
-->
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HelloAndroid">
        <activity android:name=".MainActivity">
		
<!-- ↑アプリ起動時、最初に開くクラス-->
		
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

メインアクティビティ

  • プログラムはここにかく。
  • 今回は飛ばします.
  • ただ,”アクティビティ”というのと関連する”ライフサイクル”というのを後で話します.

レイアウト

ここで画面のレイアウトを決めます.
ここでは直感的にドラッグアンドドロップでレイアウト作成もできます.
または右上のCodeもしくはSpritを押すとソースコードもあるので,そこからレイアウト作成もできます.

グレイドル

グレイドルは2つある

build.Gradleの右に薄く灰色でProject, Moduleと書いてあります.
上のGradleは"ProjectのGradle",下のGradleは"ModuleのGradle"と言ったりします.

Gradleは変更を加えた後,上に出てくるSync Nowを押して更新してください.

Build.Gradle: Project

// 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
    id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
}

このpluginsにはプロジェクト全体で使用するプラグインが書いてあります.
上からAndroidアプリ,Androidライブラリ,Kotlinのプラグインがあります.
しかしapply falseと書いてあり,これはここではプラグインを適応しない.という意味です.
後でModuleのGradleで適応します.

Build.Gradle: Module

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

まずProjectのGradleで適応しなかったプラグインを適応します.

android {
    compileSdk 33

    defaultConfig {
        applicationId "com.b22712.audio"
        minSdk 26
        targetSdk 33
        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
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    namespace 'com.b22712.bag'
}

いくつかの設定があります.その中で重要な部分やよく触る部分を書きます.

  • compileSdk,minSDK
    • "バージョンとは"で説明したSDKの設定.
  • defaultConfig
    • ここの設定は自動的にManifestに追加されます.
    • versionCodeやversionNameはアプリをリリースする時使います.
dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.5.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

dependenciesにはライブラリの依存関係が書かれます.
例えば

    //csv関係のライブラリ
    implementation 'com.opencsv:opencsv:5.2'
    implementation 'org.apache.commons:commons-csv:1.8'

    //room(データベース)関係のライブラリ
    implementation "androidx.room:room-runtime:2.2.5"
    kapt "androidx.room:room-compiler:2.2.5"

アプリであるためには

ただのJavaのプログラムとAndroidアプリにはいくつかの違いがあります.
僕の思う最も特徴な点は"タイミング"です.

Androidには"ライフサイクル"というものがあります.
この画像はActivityのライフサイクルです.
Activityは1画面だと思ってください.

アプリを起動し画面を立ち上げた時,いくつかのタイミングが存在します.
画面が作られたタイミング
画面が止まったタイミング
画面が破棄されたタイミング
ライフサイクルのおかげで,これらのタイミングで特定の処理が実行できます.

例えば
画面が作られたタイミングで,サーバーと通信する.
画面が止まったタイミングで,いくつかの処理を一時的に止める.
画面が破棄されたタイミングで,データベースに保存する.
などが実現できます.

おわりに

今回はAndroidアプリ開発の第一歩として,ソースコードに触れる前の段階の解説をしました.
ここからMainActivityをいじったり,新しいクラスを作ったりしてアプリを実装していきます.

使用する言語はJavaか,Javaと100%の互換性のあるKotlinです.
どちらもオブジェクト指向であるため,以下の単語の意味がわかる程度に調べておきましょう.

  • インスタンス化
  • クラス
  • 拡張for文
  • null許容型 and 強制アンラップ

もっとちゃんと開発したい人は以下の単語も調べておきましょう.

  • インターフェース
  • コールバック(リスナー)
  • データクラス
  • LiveData

もっともっと開発したい人は以下の単語を調べましょう.

  • コルーチン
  • サービス(フォアグラウンドサービスとか)
  • ラムダ式
  • mavenCentral

それでは.また.
Happy Hacking

Discussion