- 1. Android Studio インストール
- 2. iPhoneのアプリはどうやってできるのか?
- 3. Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
- 4. Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
- 5. コルーチンとチャネル入門#8
- 6. AlarmManagerの複数登録
- 7. 【Jetpack Compose】StateFlow でカウンターを作ってみる
- 8. ImageSpanで画像の高さを変えたい
- 9. 【備忘録】Geospatial API のサンプルを動かすまで
- 10. [Android] ActionBarのUpButtonを制御する
- 11. Kotlin 今どきよくある JSON リクエストからのパース
- 12. XMLのvariableパラメータでジェネリックな型を指定する方法
- 13. Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
- 14. コルーチンとチャネル入門#7
- 15. [Android] 簡単にSnackBarの背景色を変えてみる
- 16. 【Android, Kotlin】Timerを使い一定間隔で一定処理を行う
- 17. コルーチンとチャネル入門#6
- 18. Androidでボタンを一定時間無効にする方法
- 19. AndroidのEditTextのつまみ部分の色をする方法
- 20. 【Android】manifestOutputDirectoryでエラーが出た時の対処法
Android Studio インストール
# はじめに
Android初心者の方向けの記事です。Android Studioインストールからエミュレータ起動までを書いています!
## Android Studio インストール
AndroidのDeveloperにてインストールできます。
こちらを参考にインストールをして下さい。30GBとかあるのでMacのスペックによりますが、長いと1時間ほどインストールに時間がかかるのでお茶でもしながら気長に待って下さい。
https://developer.android.com/studio/install?hl=ja#mac
## インストール後のトップ画面

### ① New Project
言葉の通り、プロジェクトを作成できます。「Finish」を押下でプロジェクトが
iPhoneのアプリはどうやってできるのか?
スマートフォンで日々使えるアプリたち。
これらは一体どうやって作られているのか、まとめました。## アプリとは?
アプリとは、「application software(アプリケーションソフトウェア)」の略で、目的にあった作業をする応用ソフトウェアのことです。
具体的には、スマホであれば、ゲームやメッセージアプリ、動画再生など
パソコンであれば。表計算やワープロなどこのアプリたちは、『OS(オペレーションシステム)』上にインストールして使用できるようになります。
#### OSとは?
OSとは私たちが使うすべてのコンピュータ(パソコン、スマホなど)を制御するのに必要な基本ソフトウェアのことです。簡単にいうと、パソコンやスマホを動かすためのソフトです。OSがないと電源を入れても何も表示されず、キーボードから文字も入力できなくなります。一般的なOSとしては、下記があります。
| パソコン | スマホ |
|:-:|:-:|
| Windows , MacOS , Linux , ChromeOS | iOS(iPhoneで使用)、Android|## iO
Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
# はじめに
Androidエンジニアのみなさん、こんにちは。
今年もDroidkaigiに応募したいけどネタが思いつかない @KentaHarada です。漠然とネタを考えていますが、なにも思いつきません :innocent:
まずはトリガーリストを作って脳を刺激するところから始めてみようと思います :rolling_eyes:# 1. 過去のセッションを振り返る
Droidkaigiでは初心者向けの内容からディープな内容まで幅広いセッションが開催されています。過去のセッションの内容を振り返って雰囲気を思い出してみます。全部みると大変なので 2019年からスタート!### 2019年
– [採択されたセッション](https://droidkaigi.jp/2019/accepted)
– [投稿されたセッション一覧](https://droidkaigi.jp/2019/proposals/)
– [Droidkaigi 2019 Day.1 (YouTube)](https://www.youtube.com/watch?v=4suIJHROcK0&list=P
Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
# 概要
* あるアプリで Flutterのバージョンを上げる対応をしたら、Android版として生成したAPKのファイルサイズが倍くらいに大きくなってしまった
* 色々調べると結構複雑な問題が絡んでおり、かつドキュメントが分散していて理解がしづらかった
* 今回APKのファイルサイズが大きくなったのはネイティブライブラリが非圧縮でアーカイブされていたことが原因だったが、これ自体は問題がなく、むしろ推奨動作であることがわかったなお、これは Flutterを使わない通常の Androidアプリにも適用される話です。
# 起こったこと
Flutterの バージョン1系を使っていたあるアプリをバージョン2系を使うようにしたところ、生成されたAPKのサイズが倍くらいになってしまいました。具体的には 100MBくらいだったものが 180MBくらいになったイメージです。
APKの生成は以下のような感じで行なっていて、この処理自体は特に変更していません。
“`
> flutter build apk –flavor production -t lib/main.dart –re
コルーチンとチャネル入門#8
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/08_Channels)
# チャネル
共有の可変状態を含むコードを書くのは、とても難しくエラーを起こしやすいことが知られている。(このチュートリアルでさえ、コールバックを使用するソリューションを実装するかたわら、遭遇した) 共有の可変状態を使う情報の共有の代わりに、メッセージによる情報の共有により、これを簡単にしようとしている。コルーチンはチャネル経由でお互いにメッセージをやりとりすることができる。
チャネルは、異なるコルーチンの間でデータを渡すことを可能にする通信基本命令である。あるコルーチンはチャネルに対していくつかの情報を送ることができ、一方で他のコルーチンはチャネルからその情報を受け取ることができる。
この記事では、時間を指定した場合の実装になります。
# AlarmManagerをセット
“`kotlin
class SettingAlarmManager : Application(){
fun settingAlarmManager(
context: Context,
timeDiff: Long,
id: Int,
) {
val alarmManager = context.getSystemService
【Jetpack Compose】StateFlow でカウンターを作ってみる
Composable 入れ子の更新具合を確認します。
“`kotlin
@HiltViewModel
class SampleViewModel @Inject constructor() : ViewModel() {private val _count = MutableStateFlow(0)
val count = _count.asStateFlow()fun inc() {
_count.update { count -> count + 1 }
}}
“`
[? StateFlow の View への公開](https://android.benigumo.com/20210830/expose-stateflow/)“`kotlin
@Composable
fun SampleScreen(
viewModel: SampleViewModel = hiltViewModel()
) {val count: Int by viewModel.count.collectAsState()
Column(
ImageSpanで画像の高さを変えたい
# はじめに
今回は spanを使っていく中で 画像と行の高さが合わずに、違和感がある状態だったので
色々試した結果 どこを変えたかを記事にして残しておきます# ImageSpan
public ImageSpan(@NonNull Context context, @NonNull Bitmap bitmap, int verticalAlignment)
とある様に
ImageSpanでは必須の引数として Context と Bitmap を必ず設定する必要があります
**必須の引数二つのみ**を設定していると画像の高さは行の下辺と画像の下辺が同じ高さになるのが
デフォルトの様です# 解決法
画像の高さを変えるにの注目したのは 第三引数にある verticalAlignment でした
intであるので はじめは適当な数字を入力してみましたが、特に変化はありませんでした
そこで0から順に入力してみることにしました
0では初期値である 行の下辺と画像の下辺が同じ位置になりました(変化なし)
1にしたところ、画像の高さは 行の上辺と下辺の間、つまり真ん中の高さ
【備忘録】Geospatial API のサンプルを動かすまで
# ARCore Geospatial API 使うためのメモ
Geospatial APIを試したくてGoogle CloudやUnity 上で設定とサンプルをとりあえず動かすまでの手順の備忘録。
基本的には以下を参照した。https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android
## 環境
* Unity 2021.3.4f1
* ARCore Extensions 1.31.0
* ARCore XR Plugin 4.2.3
* XR Plugin Management 4.2.1サンプルはARCore ExtentionsのGeospatial Sampleを手元にあったAndroidでとりあえず試す。
## 手順
手順は基本的に上記のサイトベースで実施
1. [Google Cloud プロジェクトを設定する](https://developers.google.com/ar/develop/unity-arf/geospatial/deve
[Android] ActionBarのUpButtonを制御する
## はじめに
Navigationコンポーネントを使用している時の、画面上部のActionBarにあるUpButton(←ボタン)の制御方法について記載します。
Navigationの導入は省きます。公式ドキュメントはこちら:[Navigationコンポーネント](https://developer.android.com/guide/navigation?hl=ja)## Activityをfinishする
“`MainActivity.kt
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
finish()
return true
}
}
return super.onOptionsItemSelected(item)
}
“`## 現在のFragmentによって処理を変える
“`MainActi
Kotlin 今どきよくある JSON リクエストからのパース
数年で一気に変わってます、JSONの取り扱い処理。
Gson も Moshi も不要です。
“`kotlin
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = “application/json”.toMediaType()
val json = Json {
ignoreUnknownKeys = true
isLenient = true
} // *
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
“`Kotlin 内蔵の serialization を使うのが良いでしょう。
[? Kotlin 今どきよくある JSON リクエ
XMLのvariableパラメータでジェネリックな型を指定する方法
# はじめに
XML上でジェネリックなパラメータを指定する実装を少し調べる機会がありましたので、議事録的に残しておこうと思います。# 指定方法
指定方法は以下です。“`
“`以上になります。
variableには特殊文字は使用できないので、記号部分は上記のように記載する必要があります。# さいごに
上記の実装頻度は高くはないものの、実装するとなると少し考えてしまう方もいるかもしれません。
その際にはこちらの実装をお役に立てていただけますと幸いです。
Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
Jetpack Compose 勉強記録その3です。
# 今回の内容
https://developer.android.com/jetpack/compose/tutorial?hl=ja
チュートリアルの続きをやっていきます。
今回はレッスン 4:リストとアニメーションをやっていきます。
リストは必ず使うと言っても過言では無いので、気になります。
# メッセージのリストを作成する
“`MainActivity.kt
@Composable
fun MessageCard(messages: List) {
LazyColumn {
items(messages) { message ->
CardItem(message)
}
}
}
“`“LazyColumn“ “LazyRow“
こちらを使用する事でリストを表示する事が出来るみたいです。
“LazyColumn“は縦のリストです。“LazyRow“は横のリストです。
“items“に渡
コルーチンとチャネル入門#7
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/07_Progress)
# 進捗の表示
いくつかのリポジトリの情報はかなり早くロードされるにもかかわらず、ユーザーはすべてのデータが一旦ロードされると結果リストを見るだけである。それまでは、ロード中アイコンが進捗を表示するが、どのコントリビューターがすでにロードされているのかという、現在の状態についての情報がない。
中間の結果を早めに見せ、それぞれのリポジトリのデータをロードした後で、すべてのコントリビューターを表示することができるかもしれない。

この機能を実装するには、中間の状態について呼び出されるコールバックとして、UIを更新す
[Android] 簡単にSnackBarの背景色を変えてみる
# 初めに
今回SnackBarの背景色を変更したい時に悩むことがあったのでここにメモとして残そうと思う。
# 動作の内容
“`kotlin
//MainActivity.ktval snackbar = Snackbar.make(findViewById(android.R.id.content),”タイトルが入力されていません。”, Snackbar.LENGTH_SHORT)
//R.color.errorはColor.xmlを参照する。
//詳しくは下記URLまで、
snackbar.view.setBackgroundResource(R.color.error)
snackbar.show()
“`##### Color.xmlについて
https://qii
【Android, Kotlin】Timerを使い一定間隔で一定処理を行う
## はじめに
IT企業入社3か月目の初学者のアウトプットです。## やりたいこと
Timerを使って、一定間隔で一定の処理を行う
(TimerTaskの内容を繰り返し行う)## 手順
様々な書き方があると思いますが本記事ではシンプルな書き方を記述します。
1.Timerオブジェクト作成
“`kotlin
val timer = Timer()
“`
2.TimerTaskクラスに繰り返したい処理を記載
“`kotlin
private val timerTask = task()class task : TimerTask() {
override fun run() {
println(“hello”)
}
}
“`
3.scheduleAtFixedRateメソッドを記載
“`kotlin
scheduleAtFixedRate(TimerTask task, long delay, long period)
“`
第1引数:繰り返しを実行するクラス
第2,3引数:Long型
## サンプルコード“`kotlin:MainAc
コルーチンとチャネル入門#6
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/06_StructuredConcurrency)
# 構造化された並列性
コルーチンスコープは、異なるコルーチンの間の構造と親子関係の責務を担っている。新しいコルーチンは常にスコープの内側で開始する。コルーチンコンテキストには、コルーチンのカスタム名や、コルーチンがスケジュールされるスレッドを指定するディスパッチャーのような、与えられたコルーチンを実行するために使う追加の技術情報が格納されている。
`launch`、`async`、`runBlocking`が新しいコルーチンを開始するために使われると、対応するスコープが作られる。これらすべての関数は、引数としてレシーバーを持つラムダを取り、暗黙的なレシーバ型は`CoroutineScope`である。
“`Kotlin
launch { /* this: CoroutineScope */
}
“`
新しいコルーチンは、スコープの内側でのみ
Androidでボタンを一定時間無効にする方法
# 概要
Androidのボタンの連打を防ぐためボタンが押されたら一定時間無効化したいことがあった。
そのため、ボタンを一定時間無効にする方法を記載する。
言語はKotlin# ボタンを一定時間無効にする方法
以下のような関数を定義する。
“`Kotlin
// Buttonを指定mill秒の間無効化する
fun disableButtonFixedTime(button: Button, millSec: Long) {
button.isEnabled = false
Handler().postDelayed({ button.isEnabled = true }, millSec)
}
“`ボタンを押したときに上記の関数を呼び出すことによって指定時間ボタンを無効化することができる。
“`Kotlin
button.setOnClickListener {
disableButtonFixedTime(it, 1000)
something() // ボタンを押したときにやりたい処理
}
“`
AndroidのEditTextのつまみ部分の色をする方法
# 概要
AndroidのEditTextのつまみ部分の色を変更したいときがあった。
変更が反映されず少し手こずったので忘備録としてやり方を記載する。# EditTextのつまみ部分の色をする方法
styleで`colorControlActivated`に変更したい色を定義する。
“`styles.xml“`
レイアウトのTextViweのthemeにstyleを反映させるとつまみの色が変化する。
`style=”@style/CustomTextSelectionHandle”`としてもつまみ部分の色は変更されず、themeでないと反映されなかった
“`layout.xml
【Android】manifestOutputDirectoryでエラーが出た時の対処法
# 概要
下記のようなエラーがでたのでその対処法。
“`
Could not get unknown property ‘manifestOutputDirectory’
“`# 対処法
下記コードを“`manifestOutputDirectory“`使用部分の直前に追加
“`
def manifestOutputDirectory = multiApkManifestOutputDirectory.asFile.get()
“`
(もしくは、“`$manifestOutputDirectory“`を“`src/main“`に置き換える)[参考サイト](https://stackoverflow.com/questions/64389372/could-not-get-unknown-property-manifestoutputdirectory)