<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dolphin</title>
	<atom:link href="https://bps-e.com/dev/category/android/dolphin/feed/" rel="self" type="application/rss+xml" />
	<link>https://bps-e.com/dev</link>
	<description>android アプリ開発 kotlin + jetpack compose + material 3</description>
	<lastBuildDate>Tue, 26 Sep 2023 12:18:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://bps-e.com/dev/wp-content/uploads/2022/10/cropped-logo3-32x32.png</url>
	<title>Dolphin</title>
	<link>https://bps-e.com/dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[Android] 022. 動画再生 Exo Player(androidx.media3)</title>
		<link>https://bps-e.com/dev/android-003-022/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Tue, 29 Aug 2023 22:37:47 +0000</pubDate>
				<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[Giraffe]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[androidx.media3]]></category>
		<category><![CDATA[Exo Player]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=865</guid>

					<description><![CDATA[androidx.media3のExo Playerで動画再生を試してみました media3の最新バージョンは1.2.0-alpha01で安定版は1.1.1です現時点ではdeveloperの説明の日本語版は更新されてない [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>androidx.media3のExo Playerで動画再生を試してみました</p>



<p>media3の最新バージョンは1.2.0-alpha01で安定版は1.1.1です<br>現時点ではdeveloperの説明の日本語版は更新されてないので英語版で確認してください<br><a rel="noopener" href="https://developer.android.com/jetpack/androidx/releases/media3" target="_blank">https://developer.android.com/jetpack/androidx/releases/media3</a></p>



<p>Exo Playerも日本語版は更新されてないので英語版で確認してください<br><a rel="noopener" href="https://developer.android.com/guide/topics/media/exoplayer" target="_blank">https://developer.android.com/guide/topics/media/exoplayer</a></p>



<p>StyledPlayerViewはmedia3ではandroidx.media3.ui.PlayerViewに変わったようです<br><a rel="noopener" href="https://developer.android.com/guide/topics/media/exoplayer/mappings#class-renamings" target="_blank">https://developer.android.com/guide/topics/media/exoplayer/mappings#class-renamings</a></p>



<p>使い方はdevloper blogが参考になるかもです<br><a rel="noopener" href="https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html" target="_blank">https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html</a></p>



<div style="height:var(--wp--preset--spacing--50)" aria-hidden="true" class="wp-block-spacer"></div>



<p>とりあえず最もシンプルな構成で実装</p>



<p>androidx.media3:media3-exoplayer / androidx.media3:media3-uiをimplementationしてください<br>動画はdevloperのサンプルで使用されていたもの、アクセスするのにインターネットのパーミッションの設定もしてください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-kt" data-lang="Kotlin"><code>// &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot;/&gt;
@Composable
fun VideoPlayerView(modifier: Modifier = Modifier) {
    val context = LocalContext.current
    val url = &quot;https://storage.googleapis.com/exoplayer-test-media-0/play.mp3&quot;
    val exoPlayer = remember {
        ExoPlayer.Builder(context).build().apply {
            setMediaItem(MediaItem.fromUri(url))
            prepare()
            play()
        }
    }

    DisposableEffect(
        AndroidView(
            modifier = modifier,
            factory = {
                PlayerView(context).apply {
                    player = exoPlayer
                }
            }
        )
    ) {
        onDispose {
            exoPlayer.release()
        }
    }
}</code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-right">Android Studio Giraffe 2022.3.1 Patch 1 built on August 17, 2023</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Android] 003. AlarmManager(バックグラウンド処理)</title>
		<link>https://bps-e.com/dev/android-003-003/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Thu, 27 Jul 2023 12:24:52 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Material 3]]></category>
		<category><![CDATA[AlarmManager]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=633</guid>

					<description><![CDATA[バックグラウンド処理の方法はいろいろありますがここではAlarmManagerを簡単にためしてみましたdeveloperの実装例とほぼ同じですがブロードキャストレシーバの処理がはしょられてたりするのでコピペでサクッと確認 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>バックグラウンド処理の方法はいろいろありますがここではAlarmManagerを簡単にためしてみました<br>developerの実装例とほぼ同じですがブロードキャストレシーバの処理がはしょられてたりするのでコピペでサクッと確認できるようにまとめました</p>



<p>バックグラウンド処理については以下を参照してください<br><a rel="noopener" href="https://developer.android.com/guide/background?hl=ja" target="_blank">https://developer.android.com/guide/background?hl=ja</a><br>AlarmManagerについては以下<br><a rel="noopener" href="https://developer.android.com/training/scheduling/alarms?hl=ja" target="_blank">https://developer.android.com/training/scheduling/alarms?hl=ja</a><br>AlarmManagerで使用するブロードキャストレシーバについては以下<br><a rel="noopener" href="https://developer.android.com/guide/components/broadcasts?hl=ja" target="_blank">https://developer.android.com/guide/components/broadcasts?hl=ja</a><br><a rel="noopener" href="https://developer.android.com/guide/topics/manifest/receiver-element?hl=ja" target="_blank">https://developer.android.com/guide/topics/manifest/receiver-element?hl=ja</a></p>



<h2 class="wp-block-heading"><span id="toc1">BroadcastReceiver</span></h2>



<p>とりあえずBroadcastReceiverに処理が渡ったら通知とToastを表示するを実装してAndroidManifestに登録します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-kt" data-lang="Kotlin"><code>internal class AlarmBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        var text = &quot;alarm!&quot;
        Toast.makeText(context, text, Toast.LENGTH_LONG).show()
        sendNotification(context, &quot;AlarmManager&quot;, text)
    }

    private fun sendNotification(context: Context, title: String, text: String) {
        val channelId = &quot;channel_id&quot;
        val channel = NotificationChannel(
            channelId,
            &quot;channel_name&quot;,
            NotificationManager.IMPORTANCE_DEFAULT).apply {
            description = &quot;channel description&quot;
            setShowBadge(true)
        }

        val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        manager.createNotificationChannel(channel)

        val builder = NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_launcher_background)
            .setContentTitle(title)
            .setContentText(text)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)

        var notificationId = 1
        with(NotificationManagerCompat.from(context)) {
            if (ActivityCompat.checkSelfPermission(
                    context,
                    Manifest.permission.POST_NOTIFICATIONS
            ) != PackageManager.PERMISSION_GRANTED) {
                return
            }
            notify(notificationId, builder.build())
        }
    }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="AndroidManifest.xml"><code>&lt;manifest&gt;
    &lt;uses-permission android:name=&quot;android.permission.POST_NOTIFICATIONS&quot; /&gt;
    &lt;application&gt;
        &lt;receiver
            android:name=&quot;.AlarmBroadcastReceiver&quot;
            android:process=&quot;:remote&quot; /&gt;
    &lt;/application&gt;
&lt;/manifest&gt;</code></pre></div>



<h2 class="wp-block-heading"><span id="toc2">AlarmManager</span></h2>



<p>ボタンを押して20秒後に実行されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-kt" data-lang="Kotlin"><code>var context = LocalContext.current
var alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
var alarmIntent: PendingIntent = Intent(context, AlarmBroadcastReceiver::class.java).let { intent -&gt;
    PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
}

Button(onClick = {
    alarmMgr?.set(
        AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + 20 * 1000,
        alarmIntent
    )
}) {
    Text(&quot;Start&quot;)
}</code></pre></div>



<h2 class="wp-block-heading"><span id="toc3">実行</span></h2>



<p>通知を送信するのでアプリインストール後アプリの通知をONにしてください<br>startボタンを押した後アプリをバックグラウンドに遷移させて20秒後に通知が発生することを確認してください<br>※ フォアグラウンドでも通知は発生します</p>



<p>デバイスをロック画面に遷移させても動作することも確認してみてください<br>※ OSの通知の設定でロック画面に通知を表示する設定をしてください</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-right">Android Studio Giraffe 2022.3.1 built on June 29, 2023</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Android] 002. 新規プロジェクトの作成</title>
		<link>https://bps-e.com/dev/android-002-002/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Wed, 03 May 2023 19:56:50 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Kotlin]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=544</guid>

					<description><![CDATA[New Project Template選択 FlamingoからEmpty ActivityがJetPack Compose向けのテンプレートに変更されました Empty Activityを選択Minumum SDK  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">New Project</span></h2>



<h3 class="wp-block-heading"><span id="toc2">Template選択</span></h3>



<p>FlamingoからEmpty ActivityがJetPack Compose向けのテンプレートに変更されました</p>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Empty Activity</mark>を選択<br><mark style="background-color:#f0f0f0" class="has-inline-color">Minumum SDK</mark> の初期値はAPI24(Android 7.0)のようですが、ここではAPI30(Android 11.0)を指定<br>※ Jetpack Composeの最低APIレベルは21(Android 5.0)だそうです<br><a rel="noopener" href="https://developer.android.com/jetpack/compose/setup" target="_blank">https://developer.android.com/jetpack/compose/setup</a></p>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-5.png" alt="" class="wp-image-546" width="594" height="429" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-5.png 902w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-5-300x217.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-5-768x554.png 768w" sizes="(max-width: 594px) 100vw, 594px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">Project Structuer 設定</span></h2>



<p>基本的には最新を指定<br>build.gradleに直接設定でも良いが、Project Structureで設定できる項目はなるべくそれで設定する方針</p>



<h3 class="wp-block-heading"><span id="toc4">Gradle</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Android Gradle Plugin Version</mark> を8.0.1、<mark style="background-color:#f0f0f0" class="has-inline-color"> Gradle Version</mark> を8.1.1に指定</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-8.png" alt="" class="wp-image-550" width="604" height="318" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-8.png 952w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-8-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-8-768x404.png 768w" sizes="(max-width: 604px) 100vw, 604px" /></figure>



<p></p>



<h3 class="wp-block-heading"><span id="toc5">SDK/Java バージョン</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Compile &#8211; Terget SDK Version</mark> を33、<mark style="background-color:#f0f0f0" class="has-inline-color">Source &#8211; Terget Compatibility</mark> をJava17に指定<br>※ Java17はプルダウンに表示されませんので手入力で$JavaVersion.VERSION_17に変更</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-7.png" alt="" class="wp-image-549" width="604" height="318" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-7.png 952w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-7-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-7-768x404.png 768w" sizes="(max-width: 604px) 100vw, 604px" /></figure>



<p></p>



<h3 class="wp-block-heading"><span id="toc6">バージョン定義</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Variables</mark>に後でbuild.gradleで使用するkotlin_version 1.8.20 / compiler_version 1.4.6を追加<br>バージョンの組み合わせの確認は以下<br><a rel="noopener" href="https://developer.android.com/jetpack/androidx/releases/compose-kotlin" target="_blank">https://developer.android.com/jetpack/androidx/releases/compose-kotlin</a><br><a rel="noopener" href="https://androidx.dev/storage/compose-compiler/repository" target="_blank">https://androidx.dev/storage/compose-compiler/repository</a></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-9.png" alt="" class="wp-image-551" width="625" height="329" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-9.png 952w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-9-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-9-768x404.png 768w" sizes="(max-width: 625px) 100vw, 625px" /></figure>



<p></p>



<h3 class="wp-block-heading"><span id="toc7">ライブラリの更新</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Suggesions</mark>でappのUpdateボタンが出ているものをすべて更新<br>今回からcompose-bomが使用されるようになっていますので個別にバージョンの設定はしません<br>※ BOM(Bill of Materials)は依存関係を管理します<br><a rel="noopener" href="https://developer.android.com/jetpack/compose/bom/bom?hl=ja" target="_blank">https://developer.android.com/jetpack/compose/bom/bom?hl=ja</a></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-10.png" alt="" class="wp-image-552" width="634" height="333" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-10.png 952w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-10-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-10-768x404.png 768w" sizes="(max-width: 634px) 100vw, 634px" /></figure>



<h2 class="wp-block-heading"><span id="toc8">build.gradle</span></h2>



<h3 class="wp-block-heading"><span id="toc9">build.gradle(Project)</span></h3>



<p>kotlin_versionを指定<br>指定はシングルコーテだとエラーとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="build.gradle(Project)"><code>plugins {
    id &#39;org.jetbrains.kotlin.android&#39; version &quot;$kotlin_version&quot; apply false
}</code></pre></div>



<h3 class="wp-block-heading"><span id="toc10">build.gradle(Module)</span></h3>



<p>jvmTargetとcompiler_versionを指定</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="build.gradle(Module)"><code>android {
    kotlinOptions {
        jvmTarget = &#39;17&#39;
    }
    composeOptions {
        kotlinCompilerExtensionVersion &quot;$compiler_version&quot;
    }
}</code></pre></div>



<h2 class="wp-block-heading"><span id="toc11">初期動作確認</span></h2>



<p>今回はテンプレートが修正されていてwarningなど出ないはずです</p>



<p>ビルドしてProblemsタブに何も出ないことを確認<br>エミュレータで起動することも確認</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-right">Android Studio Flamingo 2022.2.1 Patch 1 built on April 20, 2023</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Android] 001. Android Studioの設定の確認</title>
		<link>https://bps-e.com/dev/android-002-001/</link>
					<comments>https://bps-e.com/dev/android-002-001/#respond</comments>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Wed, 03 May 2023 19:44:01 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=524</guid>

					<description><![CDATA[Android Studio インストール/アップデート 2023/5/4 時点で最新のリリースバージョンの以下をインストールまたはアップデートしますAndroid Studio Flamingo 2022.2.1 Pa [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">Android Studio インストール/アップデート</span></h2>



<p>2023/5/4 時点で最新のリリースバージョンの以下をインストールまたはアップデートします<br><span class="marker-under-blue">Android Studio Flamingo 2022.2.1 Patch 1 built on April 20, 2023</span></p>



<h2 class="wp-block-heading"><span id="toc2">Android Studio 設定</span></h2>



<p>プロジェクトを開きメニューのFileのSettingsを開きます</p>



<h3 class="wp-block-heading"><span id="toc3">Kotlin</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Plugins</mark> からバージョンを確認します<br>ここでは1.8.20を使用します</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image.png" alt="" class="wp-image-525" width="606" height="446" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image.png 969w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-300x221.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-768x565.png 768w" sizes="(max-width: 606px) 100vw, 606px" /></figure>



<p></p>



<h3 class="wp-block-heading"><span id="toc4">JDK</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Build, Excution, Deployment &#8211; Build Tools &#8211; Gradle</mark> でGradle JDKが17以降になってることを確認<br>ここでは17.06を使用します</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-1.png" alt="" class="wp-image-526" width="611" height="450" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-1.png 969w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-1-300x221.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-1-768x565.png 768w" sizes="(max-width: 611px) 100vw, 611px" /></figure>



<p></p>



<h3 class="wp-block-heading"><span id="toc5">エミュレータ設定</span></h3>



<p>Device Managerを開きます<br>ここではPixcel 5を追加<br><mark style="background-color:#f0f0f0" class="has-inline-color">Show Advanced Settings</mark>ボタンを押してMemoryとStrageを多めに指定<br>ここではRAM: 2040 / VM heep: 512 / Internal Strage 2048 / SD card 1024とする</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="687" height="110" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-3.png" alt="" class="wp-image-529" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-3.png 687w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-3-300x48.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-8.png" alt="" class="wp-image-42" width="600" height="300"/></figure>



<p></p>



<p>・New UI</p>



<p>Beta版のGiraffe以降でAndroid Studioのユーザーインターフェースを変更するNew UIが追加されましたが、適応した場合FlamingoでもNew UIが適応されるようです<br>Flamingo単体で適応したい場合はNew UI適応のPlugin追加などで変更が可能なようです<br>※ 以下はBeta版のGiraffeのSetting画面</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2023/05/image-4.png" alt="" class="wp-image-533" width="611" height="450" srcset="https://bps-e.com/dev/wp-content/uploads/2023/05/image-4.png 969w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-4-300x221.png 300w, https://bps-e.com/dev/wp-content/uploads/2023/05/image-4-768x565.png 768w" sizes="(max-width: 611px) 100vw, 611px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://bps-e.com/dev/android-002-001/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Android] 003. 新規プロジェクト作成</title>
		<link>https://bps-e.com/dev/android-003/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Thu, 27 Oct 2022 18:00:30 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Material 3]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=152</guid>

					<description><![CDATA[New Project Template選択 Empty Compose Activity (Material3) を選択Minumum SDK はAPI26(Android 8.0)を指定最低APIレベルは21(And [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">New Project</span></h2>



<h3 class="wp-block-heading"><span id="toc2">Template選択</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Empty Compose Activity (Material3)</mark> を選択<br><mark style="background-color:#f0f0f0" class="has-inline-color">Minumum SDK</mark> はAPI26(Android 8.0)を指定<br>最低APIレベルは21(Android 5.0)<br>本当はサポートが辛いのでAPI30(Android 11.0)にしたい&#8230;</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-23.png" alt="" class="wp-image-157" width="600" height="433" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-23.png 902w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-23-300x217.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-23-768x554.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">Project Structuer 設定</span></h2>



<p>基本的には最新を指定<br>build.gradleに直接設定でも良いが、Project Structureで設定できる項目はなるべくそれで設定する方針</p>



<h3 class="wp-block-heading"><span id="toc4">Gradle</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Android Gradle Plugin Version</mark> を7.3.1、<mark style="background-color:#f0f0f0" class="has-inline-color"> Gradle Version</mark> を7.5.1に指定</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-20.png" alt="" class="wp-image-154" width="600" height="316" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-20.png 952w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-20-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-20-768x404.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<h3 class="wp-block-heading"><span id="toc5">SDK/Java バージョン</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Compile &#8211; Terget SDK Version</mark> を33、<mark style="background-color:#f0f0f0" class="has-inline-color">Source &#8211; Terget Compatibility</mark> をJava11に指定</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-21.png" alt="" class="wp-image-155" width="600" height="316" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-21.png 952w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-21-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-21-768x404.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-22.png" alt="" class="wp-image-156" width="600" height="316" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-22.png 952w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-22-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-22-768x404.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<h3 class="wp-block-heading"><span id="toc6">バージョン定義</span></h3>



<p>指定すべきcompose_versionをSuggesionsで確認してVariablesで1.3.0に更新<br>kotlin_version 1.7.20 / compiler_version 1.3.2を追加<br>バージョンの組み合わせの確認は以下<br><a rel="noopener" href="https://developer.android.com/jetpack/androidx/releases/compose-kotlin" target="_blank">https://developer.android.com/jetpack/androidx/releases/compose-kotlin</a><br><a rel="noopener" href="https://androidx.dev/storage/compose-compiler/repository" target="_blank">https://androidx.dev/storage/compose-compiler/repository</a><br>kotlinは1.7.20を使用するので対応したcompilerはandroidx.devでは1.4.0となっていたが<br>developer.android.comで1.3.2が追加された<br>developer.android.comが更新されたタイミングでAndroid Studioで指定ができるようなので<br>そちらを参照<br>kotlin_version / compiler_versionは後ほどbuild.gradleで使用</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-24.png" alt="" class="wp-image-158" width="600" height="316" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-24.png 952w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-24-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-24-768x404.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<h3 class="wp-block-heading"><span id="toc7">ライブラリの更新</span></h3>



<p>okボタンを押して一度Project Structureを閉じるとSuggesionsにcompose_versionの設定が反映されます<br>SuggesionsでappのUpdateボタンが出ているものをすべて更新</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-25.png" alt="" class="wp-image-159" width="600" height="316" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-25.png 952w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-25-300x158.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-25-768x404.png 768w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<h2 class="wp-block-heading"><span id="toc8">build.gradle</span></h2>



<h3 class="wp-block-heading"><span id="toc9">build.gradle(Project)</span></h3>



<p>kotlin_versionを指定<br>指定はシングルコーテだとエラーとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="build.gradle(Project)"><code>plugins {
    id &#39;org.jetbrains.kotlin.android&#39; version &quot;$kotlin_version&quot; apply false
}</code></pre></div>



<h3 class="wp-block-heading"><span id="toc10">build.gradle(Module)</span></h3>



<p>compiler_versionを指定</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="build.gradle(Module)"><code>android {
    composeOptions {
        kotlinCompilerExtensionVersion &quot;$compiler_version&quot;
    }
}</code></pre></div>



<p>@OptInアノテーションを有効にするため以下を追加</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="build.gradle(Module)"><code>android {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions.freeCompilerArgs += &quot;-opt-in=kotlin.RequiresOptIn&quot;
    }
}</code></pre></div>



<h2 class="wp-block-heading"><span id="toc11">テンプレートのソース修正</span></h2>



<h3 class="wp-block-heading"><span id="toc12">Theme.kt</span></h3>



<p>Template自動生成の実装でViewCompat.getWindowInsetsControllerが非推奨となってます<br>if (!view.isInEditMode)の内容を以下に置換える<br>import androidx.core.view.ViewCompatは不要なので削除</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-kt" data-file="Theme.kt" data-lang="Kotlin"><code>if (!view.isInEditMode) {
    /* getting the current window by tapping into the Activity */
    val currentWindow = (view.context as? Activity)?.window ?: throw Exception(&quot;Not in an activity - unable to get Window reference&quot;)

    SideEffect {
        /* the default code did the same cast here - might as well use our new variable! */
        currentWindow.statusBarColor = colorScheme.primary.toArgb()
        /* accessing the insets controller to change appearance of the status bar, with 100% less deprecation warnings */
        WindowCompat.getInsetsController(currentWindow, view).isAppearanceLightStatusBars = darkTheme
    }
}</code></pre></div>



<h2 class="wp-block-heading"><span id="toc13">初期動作確認</span></h2>



<p>ビルドしてProblemsタブに何も出ないことを確認<br>エミュレータで起動することも確認</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-text-align-right">Android Studio Dolphin 2021.3.1 Patch 1 built on September 30, 2022</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Android] 002. Android Studio 設定</title>
		<link>https://bps-e.com/dev/android-002/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Thu, 27 Oct 2022 17:00:07 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=144</guid>

					<description><![CDATA[Android Studio インストール/アップデート 2022/10/28 時点で最新のリリースバージョンの以下をインストールまたはアップデートしますAndroid Studio Dolphin 2021.3.1 P [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">Android Studio インストール/アップデート</span></h2>



<p>2022/10/28 時点で最新のリリースバージョンの以下をインストールまたはアップデートします<br><span class="marker-under-blue">Android Studio Dolphin 2021.3.1 Patch 1 built on September 30, 2022</span></p>



<h2 class="wp-block-heading"><span id="toc2">Android Studio 設定</span></h2>



<h3 class="wp-block-heading"><span id="toc3">Kotlin</span></h3>



<p><mark style="background-color:#f0f0f0" class="has-inline-color">Plugins</mark> からバージョン1.7.20に更新します</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image.png" alt="" class="wp-image-26" width="600" height="348"/></figure>



<h3 class="wp-block-heading"><span id="toc4">エミュレータ設定</span></h3>



<p>ここではPixcel 5を追加<br><mark style="background-color:#f0f0f0" class="has-inline-color">Show Advanced Settiongs</mark>ボタンを押してMemoryとStrageを多めに指定<br>ここではRAM: 2040 / VM heep: 512 / Internal Strage 2048 / SD card 1024とする</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-7.png" alt="" class="wp-image-41" width="600" height="194"/></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-8.png" alt="" class="wp-image-42" width="600" height="300"/></figure>



<h3 class="wp-block-heading"><span id="toc5">JDK</span></h3>



<p>プロジェクトを開いた状態でメニューの<mark style="background-color:#f0f0f0" class="has-inline-color">File &#8211; Settings</mark> を開き、<mark style="background-color:#f0f0f0" class="has-inline-color">Build, Excution, Deployment &#8211; Build Tools &#8211; Gradle</mark> でGradle JDKが11以降になってることを確認</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="256" height="207" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-18.png" alt="" class="wp-image-148"/></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://bps-e.com/dev/wp-content/uploads/2022/10/image-16.png" alt="" class="wp-image-146" width="600" srcset="https://bps-e.com/dev/wp-content/uploads/2022/10/image-16.png 969w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-16-300x221.png 300w, https://bps-e.com/dev/wp-content/uploads/2022/10/image-16-768x565.png 768w" sizes="(max-width: 969px) 100vw, 969px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Material Design 3 Catalog v1.0.0</title>
		<link>https://bps-e.com/dev/m3-001/</link>
		
		<dc:creator><![CDATA[bps-e]]></dc:creator>
		<pubDate>Thu, 31 Dec 1998 15:00:56 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Material 3]]></category>
		<category><![CDATA[Material Design 3 Components]]></category>
		<guid isPermaLink="false">https://bps-e.com/dev/?p=586</guid>

					<description><![CDATA[2023.07.27 Google Developer Reference Material Design3のComponentsリストにあるものの実装方法確認の流れで作成したアプリをリリースしました Material  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-right"><span class="fz-12px">2023.07.27</span></p>



<p><a rel="noopener" href="https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary" data-type="link" data-id="https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary" target="_blank">Google Developer Reference Material Design3</a>のComponentsリストにあるものの実装方法確認の流れで作成したアプリをリリースしました</p>



<p><a rel="noopener" href="https://play.google.com/store/apps/details?id=com.bps_e.m3controlscatalog" target="_blank">Material Design 3 Catalog</a></p>



<p>実は似たアプリはそこそこ存在はするのですが、すべてを網羅してなかったり以前のバージョンの情報だったりサンプルを公開してるサイトが広告だらけだったりで私がほしい機能にいま一歩足らずな感じだったので自分で作ってしまいました</p>



<p>Referenceなどにある説明でサクッと実装できないものもあったので、使いそうな最低限の実装のサンプルコードを作成してアプリから実装結果とサンプルコードの確認ができるようにしています</p>



<p>サンプルコードはアプリに組み込んであるのでオフラインで確認ができます<br>コード確認はandroidにプリインストールされているHTMLビューアがおすすめです<br>Googleドキュメントで開けばGoogleドライブにアップロードもできます<br>※ファイル名が無題になってしまうのがいまいちですが&#8230;<br>ソースの公開をGitHubとかダウンロードさせるかどうかも検討したのですが多重管理したくないのでこのような形になってます</p>



<p>ちょっと設定が面倒ですがwindowsのクリップボード共有の機能を使うとandroidからコピペもできます(android側にMicrosoftのSwiftkeyキーボードをインストールしたり&#8230;)<br>興味のある人は調べてみてください<br></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
