- 1. Jetpack Compose をざっくりシバいてみた
- 2. Flutterで作った簡単なメモアプリのソース公開
- 3. アプリリンクとディープリンクの違い
- 4. 【Android Studio】RenderScriptが非推奨になったのでその対応策
- 5. APIの通信準備
- 6. Androidスマホで完結!Minecraftサーバ立上げてAndroidで接続
- 7. Android Jetpack(Room + Compose)でTodoアプリ作ろう【後編】
- 8. Androidで動的に追加削除できるFormを作成する方法【kotlin】
- 9. ARCore Geospatial APIのBalloon PopサンプルをAndroidビルドして試す
- 10. Compose Multipreview Annotationsで複数のバリエーションのPreviewを表示させる
- 11. [Android] Google Play Console の「難読化解除ファイル」と「デバッグ シンボル」の警告を消す方法
- 12. 【Flutter】結局、url_launcherはどう実装すべきなのか。
- 13. アーキテクチャって何?(UIレイヤー・ドメインレイヤー・データレイヤーなど)
- 14. 開発者に向けたGoogle I/O 2022の新着情報と主な発表内容
- 15. セキュリティ上の理由により、Google Play に公開するにはデバッグを無効にする必要があります
- 16. AndroidからPCへタップ座標値をUDPで送信
- 17. FreeBSDでAndroid USBデザリング
- 18. Xsens Dot SDK( Android ) Recordingの基本
- 19. もしAndroidオープンソースがクソコードだったら
- 20. Kotlin 1.6.20の変更点
Jetpack Compose をざっくりシバいてみた
## †混沌とした令和のAndroid界隈を照らす一筋の光†
レイアウトをKotlinで書くのって何それおいしいの?(旨味がなさそうの意)
「なんでこんなん使うんや」という疑問から軽く情報をさらってみた(具体的な実装にはほとんど触れません)
当方、知識不足という致命的なバグを抱えているので、解釈が間違っていたら優しく教えてくださいませ
### 命令的UIから宣言的UIへ
これが1番大きな違いである!(わかってない)そもそも命令的だとか宣言的だとか、おおよそ日本で暮らしていて出会ったことのない単語なんだよな
あぁ~Reactとかのアレね、アレ!(わかってない)という粒度から始めていく
#### 命令的UI
* __何をするか__ という __命令的__ な処理でもって表示されたUI
* 表示させるUI自体ではなく、UIを表示する __過程を記述__ する
~~~ kotlin
val binding = HogeFragmentBinding.bind(view)
if(binding.hogeText.text == “Hello World!”)
bindi
Flutterで作った簡単なメモアプリのソース公開
## 初めに
個人開発で2つのFlutterアプリを作りました。
![teslog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37929/806820bd-6e8c-0b05-25d0-0a7ce62f461d.png)
[テスト勉強用採点記録アプリ「てすろぐ」](https://play.google.com/store/apps/details?id=com.murapon.self_scoring_app)
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37929/6c201dc3-ea55-0d30-76ed-0b9c785976fa.png)
[ハッシュタグキーパー](https://play.google.com/store/apps/details?id=com.murapon.hashtag_keeper_app)それらのアプリのソースを元にして、fluterとfireba
アプリリンクとディープリンクの違い
#
なんとなくアプリリンクはディープリンクの上位互換ぐらいにしか思ってなかったのですが、どう使い分けるの?と質問された時に答えられなかったので整理してみました。
実装方法についても備忘録的に書いてます。# アプリリンクとディープリンクの違い
機能や実装方法はほぼ一緒ですが、アプリリンクを設定すると操作する端末のOSバージョンによって挙動が少し変化します。ブラウザからhrefタグで対象のURLにアクセスした場合のデフォルト時の挙動の違いは以下のようになります。
| APIレベル | ディープリンク |アプリリンク |
| — | — | — |
| 23(6.0)未満 | リンクを開く先の選択肢が表示される |アプリリンク使用不可(ディープリンクと同じ挙動)|
| 23(6.0)以上 | リンクを開く先の選択肢が表示される |アプリへ遷移する
| 31(12.0)以上 |ブラウザへ遷移する |アプリへ遷移するこれらはあくまでもアプリをインストールした直後のデフォルトの挙動なので
アプリへの遷移を優先するかどうかはユーザーが任意に設定変更することが可能です。
【Android Studio】RenderScriptが非推奨になったのでその対応策
# はじめに
[公式から対応策が出ている](https://developer.android.com/guide/topics/renderscript/migrate?hl=ja)が、ライブラリの追加方法に少し手間取ったので、そこを含めて説明。
公式では、
1: スクリプトを Vulkan に移行する
2: 置換ツールキットを使用して組み込み関数から移行する
方法の2つが書かれているが、ここでは2番目の方法について説明。# 方法
1 [GitHubからプロジェクトをダウンロード。](https://github.com/android/renderscript-intrinsics-replacement-toolkit)2 ビルドすると、以下の場所にaarファイルが作成される。
“`
renderscript-intrinsics-replacement-toolkit\renderscript-toolkit\build\outputs\aar\renderscript-toolkit-debug.aar
“`3 組み込みたいプロジェクトの直下(appと同列部分
APIの通信準備
# 初めに
今回は、API通信のために必要なRetrofitとOkHttpの実装方法を紹介していこうと思います
ライブラリの準備自体は調べればいくらでも出てくるので簡潔になるように実装部分のみを記載していこうと思います### 実装方法
“`kotlin
private val httpBuilder: OkHttpClient.Builder
get() = if (BuildConfig.DEBUG) {
OkHttpClient.Builder()
.addInterceptor(
HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
)
.writeTimeout(writeTimeout.first, wr
Androidスマホで完結!Minecraftサーバ立上げてAndroidで接続
# やりたいこと
– Androidスマホ、タブレットから自前マイクラサーバに接続する。
– できればお金をかけたくない…
→古いスマホを活用!Webサーバーできるならやれるはず!https://pc.watch.impress.co.jp/docs/column/nishikawa/1409411.html
# 環境
– Xperia XZs (Android 8)# 構築手順
古いスマホにTermuxを入れてそこにマイクラサーバーを入れていく。## F-Droidをインストール
GooglePlayからインストール可能だが、更新されておらず、`apt update`が使えない。
最新版はF-Droidにある。https://f-droid.org/
:::note info
GooglePlay以外からアプリのインストールする場合は
「不明なアプリのインストールを許可」をしてください。
※自己責任でのインストールになります。。。
:::## Termuxのインストール
F-Droidで「termux」と検索。
「Termux Terminal
Android Jetpack(Room + Compose)でTodoアプリ作ろう【後編】
みなさんこんにちは!この記事ではTodoアプリの続きをRoomを使ってデータベースにデータを保存する部分の実装を行いたいと思います。
前編をご覧になってない方はそちらを先にご覧ください。https://qiita.com/MasashiHamaguchi/items/6e96703cb8b512c41aac
今回作成したTodoアプリのソースコードはこちらにあります。(GitHub)
https://github.com/masashihamaguchi/TodoApp-Jetpack
### 完成イメージ
# 実装手順
## 1. Roomを導入する
`build.gradle`の`dependencies`に下の2行を追加します。
“
Androidで動的に追加削除できるFormを作成する方法【kotlin】
androidで動的なFormを作成しようとした際に、
“追加削除ができてユーザーが入力した情報を取得する”
という一連の流れの実装方法が見当たらなかったので、今回私が実装した方法を紹介します。android初心者なので、改善できる箇所があったらコメントで教えていただけると嬉しいです。
完成イメージ
![ezgif-4-f90ecbb5c3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801359/9da40c17-a77f-1deb-8f12-fad184849389.gif)—
### その1:layoutの作成
“`xml:fragment_family_form.
ARCore Geospatial APIのBalloon PopサンプルをAndroidビルドして試す
# 概要
2022年5月12日(JTS)に開催されたGoogle IOでARCoreの新しいAPIが発表されました。
その名も「Geospatial API」!スマホの緯度、経度、高度、向きをGPSより正確に測位できる機能です。
ストリートビューがある場所なら利用可能とのことです。日本だと大半の公道が当てはまります。
どのようなアプリが作れるかは[公式ページ](https://developers.googleblog.com/2022/05/Make-the-world-your-canv
Compose Multipreview Annotationsで複数のバリエーションのPreviewを表示させる
Jetpack Compose 1.2 と Android Studio Dolphin 以降の組み合わせで Compose Multipreview Annotations の仕組みを使い、複数の `@Preview` を一つの Annotation で表現することができます。
https://developer.android.com/studio/preview/features#compose_multipreview_annotations
## 実装
これまで、例えば Light Theme と Dark Theme の Compose のプレビューを表示したい場合は、以下のように複数の `@Preview` を使って実装していました。
“`kotlin
@Preview
@Preview(
uiMode = Configuration.UI_MODE_NIGHT_YES
)
@Composable
fun PreviewMilestoneItem() {
MilestoneItem()
}
“`
[Android] Google Play Console の「難読化解除ファイル」と「デバッグ シンボル」の警告を消す方法
# 概要
Android アプリをリリースするとき「リリースのレビュー」のところで ↓ の警告が出ることがある。![スクリーンショット 2022-05-18 16.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/6baf8505-cd70-0dcc-d503-b63cb1aa2582.png)
“`
⚠️ 警告
この APK に関連付けられている難読化解除ファイルはありません。難読化コード(R8 / ProGuard)を使用している場合、難読化解除ファイルをアップロードすると、
クラッシュと ANR をより簡単に分析、デバッグできるようになります。R8 / ProGuard の使用は、アプリサイズの縮小につながります。⚠️ 警告
この APK にはネイティブ コードが含まれ、デバッグ シンボルがアップロードされていません。
クラッシュや ANR を簡単に分析、デバッグできるよう、シンボル ファイルをアップロードすることをおすすめします。
“`この警告が出るたびに「
【Flutter】結局、url_launcherはどう実装すべきなのか。
[_url_launcher_](https://pub.dev/packages/url_launcher) を 6.0.20 -> 6.1.2 にアップしたところ `launch` と `canLaunch` が Deprecated になっていたため書き直したが、挙動が変わったため修正。
#### 元のコード
“`dart
await canLaunch(“アプリのカスタムURLスキーム”)
? await launch(“アプリのカスタムURLスキーム”)
: await launch(“ウェブのURL”);
“`このコードに問題があったことは認識していて、Androidの場合、特定のアプリにおいては想定している経路では処理されていない。
`twitter` などのURLスキームはアプリをインストールして必要な設定をしても `canLaunch` が _false_ を返してくる場合があり、ウェブブラウザでURLを起動される。
結果的に、ディープリンクとしてサポートしているアプリが起動されていた。そのため、`canLaunch` を使用せ
アーキテクチャって何?(UIレイヤー・ドメインレイヤー・データレイヤーなど)
## はじめに
アーキテクチャについて学んだことを個人的にまとめました。「アーキテクチャ?何それ??」状態の方にとって少しでも参考になれば幸いです。
また、間違っている部分があればご指摘いただければと思います。### この記事で分かること
– アーキテクチャとは?
– UIレイヤー・ドメインレイヤー・データレイヤーの概要
– その他、大切なこと※細かい話は省いていますので、詳しくは公式ドキュメントなどをご覧ください
## アーキテクチャってそもそも何?
– 「堅牢で高品質なアプリを作るための設計」みたいなイメージ
– アーキテクチャがしっかりしてないと、修正やテストがしにくかったり、思わぬところに変更の影響が出てしまったり…など、余計な労力がかかる## 推奨されるアプリアーキテクチャ
– 推奨されるアプリアーキテクチャは、下記の矢印のような依存関係を持つUIレイヤー・ドメインレイヤー(※必須ではない)・データレイヤーに関心の分離を行う
![mad-arch-overview.png](https://qiita-image-store.s3.ap-no
開発者に向けたGoogle I/O 2022の新着情報と主な発表内容
![Codemagic_Android_Balakina.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028491/16514b72-6e47-0533-18c0-3b0ca4c8a18b.jpeg)
> This article is originally posted to [Codemgic blog](https://blog.codemagic.io/google-io-2022/).
**Googleの年次開発者会議であるGoogleI/ O2022**がぢょうど終わりました。これは、想像のはるかに超えるものでした! [Pixel Watch関連の噂](https://www.cnet.com/google-amp/news/google-pixel-watch-rumors/)のように、真実であることが証明されたものもありますが、それらは特に驚くことではありません。開発者基調講演では、興味深く、予測しにくかった見どころが多数ありました。メインの基調講演の詳細はライフスタイルメディ
セキュリティ上の理由により、Google Play に公開するにはデバッグを無効にする必要があります
## 現象
Google Play Consoleでaabファイルをアップロードすると上記タイトルのエラーになった## 対応
Unity上で以下を検索してファイルを開く
__AndroidManifest.xml__以下がTrueになっているのでfalseに編集する
__android:debuggable=”false”>__
![スクリーンショット 2022-05-16 23.42.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376429/949a53e3-03c9-f01d-d8e1-5ae74677b28d.png)再ビルドしてアップロードするとできた!
どうやら一度Development Buildにチェックをつけてしまうと、AndroidManifest.xmlのdebuggableがtrueになってしまうらしい
参考
https://unity-yuji.xyz/release-build-debuggable-apk-android-app-bundle-upl
AndroidからPCへタップ座標値をUDPで送信
■プログラムの概要
・Android側:画面アイコンをタップ移動した際の座標をUDP送信。
・PC側:winapi(言語:C++)ベースで作成したUDP受信処理。
・開発環境:AndroidStudioBumblebee2021.1.1 VisualSutudio2013
・送信確認ツール:Wireshark ver3.6.3
・用途:電子楽器。※YouTube動画リンク先:https://youtu.be/9AdsV2z7p_E
・備考:UDP受信後の処理(音生成/音色制御)は割愛してます。■Android側のプログラムのソースコード
(補足)touch_iconはトランペットアイコン、bgは背景画像。いずれもpptで作成。
“`java:activity_main.xml
FreeBSDでAndroid USBデザリング FreeBSD/i386 12.3RでAndoridをUSBにつないでUSBデザリングモードにするとカーネルモジュールがロードされue0が生えてきます。
dhclientをue0で上げるとプライベートが降ってきました。なぜかクラスCのプライベートアドレスなのに対向のアドレスの一番下が1ではなく129でした。
後はデフォルトルートと/etc/resolv.confを設定すればインターネットに接続できます。
インターネット接続がない状態でのインターネット接続は結構大変です。
とりあえずこれはWin10で書きました。
Xsens Dot SDK( Android ) Recordingの基本
# はじめに
Xsens Dot を制御するAndroidアプリを制作できる「Xsens Dot Sdk」の、サンプルアプリに実装がない「Recording」の基本的な実装方法をまとめました。Xsens DOT SDK本体や公式のドキュメントは、下記のURLのフォームに回答することで送られてくるメールからダウンロードすることができます。
https://content.xsens.com/xsens-dot-software-development-kit?hsCtaTracking=2af14a41-b15f-4733-b2ca-5498b2888842%7C21941862-cb62-421e-9e0e-2dac04d1ca9f
サンプルアプリもgithubに公開されています。サンプルにRecording機能はなく、Streamingのみの実装がされています。
https://github.com/xsens/xsens_dot_example_android本記事は、サンプルアプリ内に実装されていることに関しては解説しておらず、サンプルアプリ内の実装に一通り目を通したこと
もしAndroidオープンソースがクソコードだったら
## まえおき
– 下品なタイトルで申し訳ありません。
– あえてクソコード化させてクラス設計を考察する。という内容です。
– というのは、直近でCodeCompleteを読んでいてクラスをどう設計するべきかについて学びました。
– 抽象的な表現も多く記憶から消える前に実際のソースコードを通してクラス設計のアンチパターンをまとめてみようと思います。
– しかし設計を1からするのは難しいため、逆の発想でAndroidのオープンソースコードであればJavaで美しく設計されていると信頼して、そのうちのSimpleAdapterクラスを部分的に変更してどんなリスクが生じるのかを考察します。Fragmentクラスなどはメンバが多すぎたため少しマイナーかもしれませんがアダプタを説明の都合上採用します。
– CodeCompleteを読んだ人やクラス設計を学習している人、JavaでAndroid開発をしている人に楽しんでもらえたらうれしいです。## クラス定義のねらい
– CodeCompleteを読んでいるといろんなことが書いてあるわけですが、そもそものクラス設計の本質は『複雑さの緩和
Kotlin 1.6.20の変更点
※ソース記事は[こちら](https://kotlinlang.org/docs/whatsnew1620.html)
※Kotlin/JSやKotlin/Nativeについては個人的に使っていないので、割愛します。
Kotlin 1.6.20により、将来の言語機能のプレビューが明らかになり、マルチプラットフォームのプロジェクトのために階層構造がデフォルトになり、他のコンポーネントに進化的な改善がもたらされている。
こちらの[動画](https://youtu.be/8F19ds109-o)でも、変更の短い概要を見ることができる。
# 言語
Kotlin 1.6.20では、2つの言語の特徴を試すことができる。
– Kotlin/JVMのためのコンテキストレシーバーのプロトタイプ
– 明確なnon-nullable型
## Kotlin/JVMのためのコンテキストレシーバーのプロトタイプ
::: note alert
この機能はKotlin/JVMのためにのみ利用可能なプロトタイプである。`-Xcontext-receivers`を有効にすることで、コンパイラは本番コードでは利用できない