0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Amplifyを使用したAndroidアプリの構築

Last updated at Posted at 2025-03-09

AWS Amplifyを使用したAndroidアプリの構築(Kotlin版)

目次

  1. AWS Amplifyのセットアップ
  2. Amplifyプロジェクトの初期化
  3. Amazon Cognitoでユーザー認証の構成
  4. Amazon S3ストレージの構成
  5. Androidアプリの構築
  6. アプリのビルドと実行
  7. 注意事項

1. AWS Amplifyのセットアップ

a. AWSアカウントの作成

  1. AWS公式サイトにアクセスし、「Create an AWS Account」をクリック。
  2. 指示に従ってアカウントを作成します。

b. Node.jsとnpmのインストール

  1. Node.js公式サイトからNode.jsをインストールします。

  2. コマンドプロンプトを開き、以下のコマンドでNode.jsとnpmが正しくインストールされていることを確認します。

    node -v
    npm -v
    

c. Amplify CLIのインストール

  1. コマンドプロンプトを開き、以下のコマンドを実行してAmplify CLIをインストールします。

    npm install -g @aws-amplify/cli
    

d. Amplify CLIの設定

  1. コマンドプロンプトで次のコマンドを入力してAmplifyを構成します。

    amplify configure
    
  2. 指示に従い、以下のタスクを行います:

    • AWS管理コンソールで「IAM」を検索して選択します。
    • 左側のナビゲーションメニューから「Users」をクリックし、「Add user」をクリックします。
    • ユーザー名を設定(例: amplify-user)。
    • Access typeで「Programmatic access」にチェック。
    • 次のステップで「Attach existing policies directly」を選択し、「AdministratorAccess」ポリシーを付与します。
    • ユーザーを作成し、表示されたAccess Key IDSecret Access Keyを必ずコピーします。
    • コマンドプロンプトに戻り、リージョンやコピーしたアクセスキーを入力します。

2. Amplifyプロジェクトの初期化

  1. 新しいプロジェクト用のディレクトリを作成します。

    mkdir MyAmplifyApp
    cd MyAmplifyApp
    
  2. Amplifyプロジェクトを初期化します。

    amplify init
    
  3. プロンプトに従ってプロジェクトの設定を行います。

3. Amazon Cognitoでユーザー認証の構成

  1. 次のコマンドを実行してCognitoを追加します。

    amplify add auth
    
  2. 「Default configuration」を選択し、指示に従います。

  3. 次に、設定をデプロイします。

    amplify push
    

4. Amazon S3ストレージの構成

  1. 次のコマンドを実行してS3ストレージを追加します。

    amplify add storage
    
  2. 「Content (Images, audio, video)」を選択し、指示に従います。

  3. 設定をデプロイします。

    amplify push
    

5. Androidアプリの構築

a. Android Studioを開く

  1. Android Studioを起動します。
  2. 「New Project」を選択します。
  3. 「Empty Activity」を選択し、「Next」をクリックします。
  4. プロジェクト名を設定(例: MyAmplifyApp)し、パッケージ名や保存先を設定します。
  5. 「Finish」をクリックします。

b. build.gradleファイルの更新

  1. プロジェクトが作成されたら、**app/build.gradle**ファイルを開きます。

  2. dependenciesセクションに以下を追加します。

    dependencies {
        implementation 'com.amplifyframework:core:1.28.1'
        implementation 'com.amplifyframework:aws-auth-cognito:1.28.1'
        implementation 'com.amplifyframework:aws-storage-s3:1.28.1'
    }
    
  3. 「Sync Now」をクリックして依存関係を同期します。

c. Amplifyの設定

  1. MainActivity.ktを開きます
  2. 次のコードを追加してAmplifyを初期化します。
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.amplifyframework.AmplifyException
import com.amplifyframework.core.Amplify
import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin
import com.amplifyframework.storage.s3.AWSS3StoragePlugin

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        try {
            Amplify.addPlugin(AWSCognitoAuthPlugin())
            Amplify.addPlugin(AWSS3StoragePlugin())
            Amplify.configure(applicationContext)
            Log.i("MyAmplifyApp", "Initialized Amplify")
        } catch (e: AmplifyException) {
            Log.e("MyAmplifyApp", "Could not initialize Amplify", e)
        }
    }
}

d. ユーザー認証の実装

  1. **activity_main.xml**ファイルを開き、サインアップ用のUIを作成します。
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <EditText
        android:id="@+id/usernameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Username" />

    <EditText
        android:id="@+id/passwordEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/signupButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sign Up" />
</LinearLayout>
  1. MainActivity.ktにサインアップ機能のコードを追加します。
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val usernameEditText = findViewById<EditText>(R.id.usernameEditText)
        val passwordEditText = findViewById<EditText>(R.id.passwordEditText)
        val signupButton = findViewById<Button>(R.id.signupButton)

        signupButton.setOnClickListener {
            val username = usernameEditText.text.toString()
            val password = passwordEditText.text.toString()
            signUp(username, password)
        }
    }

    private fun signUp(username: String, password: String) {
        Amplify.Auth.signUp(username, password,
            { result ->
                Log.i("AuthQuickStart", "Successfully registered user: ${result.user.username}")
                runOnUiThread {
                    Toast.makeText(this, "Successfully registered!", Toast.LENGTH_SHORT).show()
                }
            },
            { error ->
                Log.e("AuthQuickStart", "Failed to register user", error)
                runOnUiThread {
                    Toast.makeText(this, "Failed to register!", Toast.LENGTH_SHORT).show()
                }
            }
        )
    }
}

e. S3へのファイルアップロード機能の実装

  1. UIを更新してファイルパスを入力するためのEditTextとファイルアップロード用のButtonを追加します。
<EditText
    android:id="@+id/filePathEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="File Path" />

<Button
    android:id="@+id/uploadButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Upload File" />
  1. MainActivity.ktにファイルアップロード機能のコードを追加します。
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val usernameEditText = findViewById<EditText>(R.id.usernameEditText)
        val passwordEditText = findViewById<EditText>(R.id.passwordEditText)
        val signupButton = findViewById<Button>(R.id.signupButton)
        val filePathEditText = findViewById<EditText>(R.id.filePathEditText)
        val uploadButton = findViewById<Button>(R.id.uploadButton)

        signupButton.setOnClickListener {
            val username = usernameEditText.text.toString()
            val password = passwordEditText.text.toString()
            signUp(username, password)
        }

        uploadButton.setOnClickListener {
            val filePath = filePathEditText.text.toString()
            uploadFile(filePath)
        }
    }

    private fun uploadFile(filePath: String) {
        val file = File(filePath)

        Amplify.Storage.uploadFile(
            file.name,
            file,
            { result -> Log.i("MyAmplifyApp", "Uploaded: ${result.key}") },
            { error -> Log.e("MyAmplifyApp", "Upload failed", error) }
        )
    }
}

6. アプリのビルドと実行

  1. コードの追加が完了したら、Android Studioの「Run」ボタンをクリックしてアプリをビルドして実行します。
  2. サインアップ機能を試してみてください。成功すると、ユーザーが登録されます。
  3. 次に、指定したファイルをアップロードするために、ファイルパスを入力して「Upload File」ボタンをクリックします。
    image (24).png

7. 注意事項

  • ファイルパスの指定: アップロードするファイルのパスを正しく指定してください(例えば /storage/emulated/0/Download/example.txt など)。
  • ストレージのパーミッション: 必要に応じて、AndroidManifest.xmlファイルに権限を追加します。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?