- 1. AndroidでASP.NET Coreを動かす
- 2. ActionBarをカスタマイズしてみる
- 3. 近年変化しつつあるアプリ開発者とプラットフォーマーの関係
- 4. Jetpack ComposeのPreviewにある便利な機能
- 5. AndroidでHTMLの…のように名前と値を対比してSpinnerを表示する
- 6. Jetpack Compose で ripple を丸にする
- 7. Android Jetpack の Navigationを使ってみた
- 8. リリース済みのAndroidアプリをリファクタリングしてみた
- 9. AndroidのDeepLinkを手軽にdebugする
- 10. StreamFab6とAndroid版が登場!
- 11. Jetpack Compose1.2.0で追加されたmovableContentOfを使ってみた
- 12. 【Android】CoroutineのJobについて【Kotlin】
- 13. 【Android】Unknown FragmentsでXMLプレビューが表示されない場合の対処法
- 14. Androidテンプレートレポジトリ作ったので晒す
- 15. AndroidとiOSでSuicaを読み取る
- 16. HTTP URLをAndroidアプリで開くために調べたこと
- 17. 【RecyclerView × ViewDataBinding】なるべく頭を使わずに最短で複数レイアウトを使う
- 18. JetpackComposeのLazyColumnでClipToPaddingのような余白のあるリストを設定する方法
- 19. AndroidのlibpdでJavaレイヤーで音声データを取り扱う
- 20. 【Jetpack Compose】Image()コンポーザブルが使用できない
AndroidでASP.NET Coreを動かす
# はじめに
AndroidにはTermuxというLinuxのターミナルエミュレーターがあります。
今回はこの子にPRoot経由でUbuntuをインストールして、そのうえでASP.NET Coreを動かしてみようと思います。# Termux と F-Droid
[最新版のTermux](https://f-droid.org/packages/com.termux/)は[F-Droid](https://f-droid.org/)で配信されています。
PlayストアでもTermuxは配布されていますが、2020年ごろに更新が停止され現在は一部機能が動作していません。
F-Droidは非公式ストアになるため、不明なアプリのインストールに許可する必要があるので注意してください。インストールが完了すると次のようなターミナルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/736a9edf-002f-5a8a-1b16-a7d875bb34ff.png)
ActionBarをカスタマイズしてみる
# ActionBarって表示されるだけど、正直利用価値ない
AndroidのActivityのクラスでAppCompatActivityを継承すると自動的に実行時のアプリの上部にActionBarが表示されますが、アプリケーション名が表示されているだけで、何の飾りもありません。消すこともできるんですが、このActionBarをカスタマイズして、もっと色々なことにつかえるようにしてみましょう。
参考:
公式ホームページ:[アプリバーの追加](https://developer.android.com/training/appbar?hl=ja)
# どんなカスタマイズをするか?
* ActionBarの色がデフォルトで紫色なので色を変えてみます。
* ActionBarに表示されているタイトルを自由な文字列に変えてみます。
*
近年変化しつつあるアプリ開発者とプラットフォーマーの関係
# はじめに
ここ数年アプリ業界では大きな変化が色々とありました。
今まで絶対的なルールを課していたAppleとGoogleというプラットフォーマーが、近年は少しずつ規制を緩めたり撤廃したりと相次いでいます:open_mouth:その流れを今回は大まかにまとめてみました!
# まずアプリ課金の手数料っていくら?
課金の種類と仕組み、手数料などはAppleとGoogleでほぼ同じです。課金の種類は大きく分けると2種類あり、微妙に手数料に違いがあります。
## 購入型
ゲームなどでよくあるタイプの課金。手数料は以下の通り
・「年間収益が100万ドル以内の小規模事業者」は15%(おもに企業規模で)
・それ以外は30%## サブスクリプション
その名の通り定期購入のタイプ。コンテンツを閲覧するだけの「リーダーアプリ」でよくあるやつ。手数料は以下の通り
### Apple
・最初の1年間は30%
・サブスクリプション登録者の有料サービスの日数が1年分累積されると、それ以降は15%
・初日から15%# 安くなったり規制が緩和されたのは20
Jetpack ComposeのPreviewにある便利な機能
# 初めに
今回は、Jetpack Composeで絶対に使う@Previewにある便利な機能について紹介していきます
### 本文
早速紹介していきます。
`name`にはプレビュー表示している左上にどのパーツなのかが分かりやすいように表示することができる名前です。
`device`は`Devices`の中にある端末から表示させたい端末を選択することができます。
`showSystemUi`はプレビュー内にステータスバーとアクションバーを表示することができます。
`showBackground`は本来プレビューは透明の背景が適応されてますが、背景を表示することができるようになります。
背景色を変えたい場合は`backgroundColor`に対してARGBの値を代入することで変更することができます。
“`kotlin
@Preview(
name = “画面名”,
device = Devices.PIXEL,
showSystemUi = true,
showBackground = true,
)
“`
### 最後に
他にも便利なのはたくさん
AndroidでHTMLの
# Androidのドロップダウンリストって名称しか持てないの?
Androidのドロップダウンリスト(spinner)は普通に書くと名称しかドロップダウンリストに持てません。
ドロップダウンリストから選択すると上の例だと「ひとつめ」、「ふたつめ」、「みっつめ」、「よっつめ」のいずれかがリスナAdapterView.OnItemSelectedListener#onItemSelectedに渡されます。ここでやりたいのはHTMLの\
Jetpack Compose で ripple を丸にする
そもそも ripple 効果は丸なのですが、この記事では ripple 効果が Composable の全体ではなくて円形で見えることを目指します。
# 領域を無視する方法
Jetpack Compose の ripple は `indication` に `rememberRipple` を指定することでカスタマイズできます。(指定する場合 `InteractionSource` も同時に指定する必要があります)
領域外までに ripple 効果を見せるには `rememberRipple` の `bound` を false にすることでできます。
“`kotlin
Box(
modifier = Modifier
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(bounded = false),
enabled = true
Android Jetpack の Navigationを使ってみた
Androidで画面をたくさんある場合、その画面の数分layout.xmlとFragmentを作成することになるが、どのFragmentからどのFramgmentへ、何の条件のときに遷移するかを制御するのがコードでベタベタになってしまいます。
Android Jetpack の Navigationを使うとその辺がスッキリします。
# 参考URL
[本家Android developers](https://developer.android.com/guide/navigation?hl=ja)
[[Android] 10分で作る、Navigationによる画面遷移](https://qiita.com/tktktks10/items/7df56b4795d907a4cd31)
[Navigation Componentの使い方(概要〜画面遷移〜データの受け渡し編)](https://qiita.com/naoi/items/8384561d30111c8704b3)簡単に手順だけ説明しますので詳細はgitHubに上がっているソースを見てください。
[gitHub](https
リリース済みのAndroidアプリをリファクタリングしてみた
これまで、個人開発で製作してきたAndroidアプリ「[書籍管理ができる巻数メモ](https://play.google.com/store/apps/details?id=com.highcom.comicmemo)」は継続的に機能追加するアップデートは行ってきたものの、リファクタリングによって刷新するような事はしてきませんでした。
仕事でもAndroidアプリを開発するようになり、知識も少しずつ増えてきたので、思い切ってリファクタリングをしてみることにしました。# なぜリファクタリング?
個人開発をしていると、ゼロから作ったり、どんどん機能を追加したりすることはよくありますが、既存機能をリファクタリングするというのは、やろう!って思わないとなかなかやらないと思います。
リファクタリングの難しいところは、– 変更後も既存と同等の機能を実現する
– 変更前のデータも引き継ぐ
etc…既にサービスを提供しているものをそのまま継続して利用できるようにしなければなりません。なので、リファクタリングをするということも新しい技術的な知識が習得できると思ったのが背景にあります。
AndroidのDeepLinkを手軽にdebugする
**「DeepLink」**
モバイル開発においてよく使う機能であり、ユーザとしても便利なものであり、そしてdebugがやりづらい。という開発においては苦しいもの。というイメージが個人的にはありました。(本番環境や開発環境でURL違うなど準備もそこそこある)
それを解決する方法を本記事では紹介します。# DeepLinkについてざっくりと
– iOSのユニバーサルリンクと似ている
– httpも使用可能
– カスタムURLスキームと似ているが微妙に異なる
– タップすると設定されたアプリが起動される
– 特定の画面を表示させることも可能# 解決したいこと
– DeepLinkのためにサーバやドメインなどを準備したくない
– 手早く動作確認したい# Android Studioでの設定
## AndroidManifestにfilterを設定“`xml
StreamFab6とAndroid版が登場!
Jetpack Compose1.2.0で追加されたmovableContentOfを使ってみた今回は、Jetpack Compose1.2.0で追加された`movableContentOf`について解説していきたいと思います。
1.2.0で追加されたのですが、自分は完全に見落としていました。
1.3.0で追加された`LookaheadLayout`と合わせて使うと、
これまでComposeで実現しづらかった、Shared Element Transitionを実現できるみたいです。本記事では、まず`movableContentOf`について見ていきたいと思います。
## movableContentOfとは何か
`movableContentOf`とは何かというと、公式サイトによれば
https://developer.android.com/jetpack/androidx/releases/compose-runtime?hl=ja#1.2.0
> コンポーザブル ラムダを別のラムダに変換します。変換されたラムダは、状態および対応するノードを呼び出された新しい場所に移動します。前の呼び出しがコンポジションから出ると状態は一時的に保持され、ラムダへの新しい呼び出し【Android】CoroutineのJobについて【Kotlin】
# はじめに
今回はCoroutineのJobという機能について調べたものを記事にします
箇条書きにしていてわかりにくいとは思いますが、使いながら理解を深めていこうと思っているのでご容赦ください# まとめ内容
Jobのできることを箇条書きにしてまとめたものです
・親子階層で配置することができ、親が取り消されると 子のロジックも取り消される
・SupervisorJobを使用してカスタマイズできる機能で、CancellationException以外の例外で子が失敗するとその親がキャンセルされる(結果 全ての子がキャンセルされる)
・基本的にはJob を実行しても値を出すことはできない・Jobの状態は New,Active,Completing,Cancelling(キャンセル中),Cancelled (キャンセル済み),Completed の6つの状態が存在する
・Jobはアクティブな状態で作成され開始されます。
・またstartまたはjoinを呼び出すことによってアクティブにすることもできます。
“`
job.start()
job.join()
“`
・コルーチンが動【Android】Unknown FragmentsでXMLプレビューが表示されない場合の対処法
# はじめに
Jetpack Compose登場してからじわじわと浸透が進んでいる現在ですが、まだXMLを使用した開発は現役ですよね。
そんな中XML上でfragmentコンポーネントを使用しているとエラーが発生し、プレビューが表示されない問題があります。
この問題の対処法を備忘録的にまとめておこうと思います。# 対処法
まずエラー内容は以下になります。
![スクリーンショット 2022-11-20 17.03.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/9e214d08-f05d-1dd8-2581-6acf4874254c.png)こちらのエラーは主にfragmentタグを使用している場合などが当てはまりますね。
メッセージにもヒントがあるのですが、原因としてはfragmentは実行時に挿入されるため、対象のコンポーネントをIDEが認識できないことです。そのため、対応方法としては以下のようにtoolsを使用してエラーの対象であるコンポーネントに対してレイアウトを設定
Androidテンプレートレポジトリ作ったので晒す
# はじめに
こんにちは!Androidエンジニア3年目のgotlinです。
今回はAndroidのテンプレートレポジトリを作ってみたので、晒してみます。
[チームで育てるAndroidアプリ設計](https://peaks.cc/books/architecture_with_team)を読んでからずっとAndroidのテンプレートレポジトリを作りたかったのですが、どの機能までをテンプレートにいれるか結構悩んだりしてて、最近まぁこのくらいでいいかっていうのが、見えてきたところです。個人開発レベルのテンプレートリポジトリなので、そぎ落としている部分もあります。
作成したリポジトリは以下です。
https://github.com/goutarouh/BaseAndroidProject/tree/main
移植時の方法もREADMEにあるので良かったら使ってみてください!
# 設定したこと
## Gradle設定周り
### バージョンカタログ
設定は[こちら](https://github.com/goutarouh/BaseAndroidProject/blobAndroidとiOSでSuicaを読み取る
ICOCA やねんけどね
# 概要
– **今回の目的**
Android と iOS で Suica を読み取ります。
– **将来の目的**
Suica は NFC TypeF でマイナンバーカードは TypeB だそうです。役所系の案件を獲得できるかも知れません。## 用語
– **NFC**
Near field communication の略で近距離無線通信と訳されています。主に非接触型カードに搭載され、近年のスマートフォンにも搭載されています。
– **Type**
運転免許証やマイナンバーカードなどに使用されています。
– **Type F (FeliCa)**
Suica PASMO Edy nanaco などに使用されています。
– **IDm**
カード固有の ID です。スマートフォンをピッって当てるだけで読み取れHTTP URLをAndroidアプリで開くために調べたこと
Androidアプリでは特定のドメインやパスのリンクをアプリで開くことができ、それによりアプリにユーザを誘導することができます。
リンクを開く方法は以下の3種類があります。
1. Deep Links
1. Web Links
1. Android App Linksただし、これはAndroidでアプリを持っているユーザ限定です。ダウンロードしていないユーザに対しては、通常のWebブラウザで表示されます。
そもそもダウンロードからさせたいなどの場合は、Firebase Dynamic Linksなどが役に立つかもしれません。# Deep Links (iOSではCustom URL Scheme)
ユーザをアプリの特定の部分に遷移させる、**任意のスキームのURI**を指します。
AndroidManifest.xmlにインテントフィルターを追加し、URLとアプリを紐づけることができます。“`xml
<【RecyclerView × ViewDataBinding】なるべく頭を使わずに最短で複数レイアウトを使う
https://github.com/yuskey38/example-multi-layout-recycler-adapter/tree/main/app/src/main/java/com/example/example_multi_layout_recycler_view
## やりたいこと
なるべく頭を使わずに最短でRecyclerViewで複数レイアウトを使う。
いつも忘れる + ググった時にやり方色々出てきてややこしいのでテンプレート作っておく。## 実装方法の大枠
基本的に最後に添付したコードをまるっとコピペして少し修正すればOK。
データやレイアウトは自由に作って試してみてください。① ViewTypeのEnumを作る
② `onCreateViewHolder`はコピペ
③ `onBindViewHolder`もほぼコピペ
④ `getItemViewType`もほぼコピペ
⑤ `getItemCount`もほぼコピペ
⑥ ViewHolderのメソッドでデータとレイアウトを紐づける※ 上記の順番で実装していく場合は`ViewHolder`がないよとエ
JetpackComposeのLazyColumnでClipToPaddingのような余白のあるリストを設定する方法
JetpackComposeでリストの表示などは簡単にできますが、今までのリストのように上に余白を作りたいと思いました。
簡単に設定ができました。
# 設定方法
“`list.kt
LazyColumn (contentPadding = PaddingValues)
(top = 16.dp)){
items(100) { index ->
Text(text = “Item: $index”)
}
}
“``PaddingValues`
こちらをLazyColumnに設定するとできます。
`PaddingValues`は`start` `top` `end` `bottom`
それぞれ設定ができます。![Videotogif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/d2fba24b-1492-b327-7cd8-61e6737edd5b.gif)
以上です!
AndroidのlibpdでJavaレイヤーで音声データを取り扱う
libpdのサンプルを見ると端末の音声入力・音声出力を使う例しかなく、実際に出力される音声のPCMデータにアクセスする方法がよくわかりませんでした。
調べてみたところ、`PdBase.startAudio()`ではなく`PdBase.process()`を使うことでlibpd組み込みの音声入出力ではない、任意の音声データを処理させることができそうだってことがわかったので、これを実装するのに必要な手順をメモがてらまとめてみました。
## .pdファイルを適当な場所に配置する
assets内などに保存された.pdファイルをストレージ上の適当な場所に保存します。
たとえば、`assets/my_patch.pd`に保存されている.pdファイルをアプリのプライベートなファイル領域に保存するなら以下のような感じで保存できます。“`kotlin
private fun preparePatch(): File {
val patchName = “my_patch.pd”
val patchFile = File(context.filesDir, patchName)
i【Jetpack Compose】Image()コンポーザブルが使用できない
# どういうことか
Androidデベロッパーのチュートリアルをやっている。
https://developer.android.com/codelabs/basic-android-kotlin-compose-add-images?hl=ja#3
画像を表示するためにImageコンポーザブルを追加する、とある。
“`kotlin: MainActivity.kt
Image(
painter = image
)
“`テキスト通りに進めているハズだがエラーが出て画像を表示できない。
`Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:`
## 原因と解決
適切な `import` を行うことで解決する。
**チュートリアルには載っていない!**“`kotlin: MainActivity.kt
import androidx.compose.foundation.Image
“`自動補完でや
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた