- 1. 日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ2/9)
- 2. FlutterでReleaseビルドをするとネットが繋がらなくなる問題への対処法
- 3. 推移的依存関係をわかりやすくみよう
- 4. MacでAndroid Flutterの環境構築
- 5. [Setup] Appium 2.x + Robotframework + Windows
- 6. GPT-4を使用できるAndroidアプリ
- 7. PendingIntentのフラグを理解してなかったせいで詰まった話
- 8. Androidチームでインターンを取ってみた
- 9. Jetpack ComposeでonResume/onStartに相当する処理を実行する
- 10. AndroidスマホにKDDI系SIMを入れたときに2重に表示されるキャリア表示を改善する
- 11. 【Flutter】テキストの装飾
- 12. 日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ1/9)
- 13. Jetpack ComposeのCanvasでメーターのような可変する円を作る
- 14. マルチモジュールでの依存関係の記述をいい感じにする
- 15. aboutLibrariesに手動でライセンスを追加する
- 16. Android ビルドタイプによってアプリケーションIDを変える方法
- 17. Android通知のグルーピングを制御する
- 18. Android Hiltの@Inject constructor とは何か
- 19. 【違いを比較】「ViewBinding」と「DataBinding」
- 20. 【Android】xmlのコードフォーマット【随時更新】
日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ2/9)
# はじめに
この記事はだいぶ前(2012年)にココログの「[キリーの日本語プログラミング](http://uemon3511.cocolog-nifty.com/nihongoprogram/)」に掲載したコラムですが、再編集してこちらにも投稿します。今となっては古い話ではありますが、OSによってプログラム言語(AndroidではJava)が決め打ちされている環境で規定と異なるもの(Mind)を走らせたことの記録としてお読みください。
# AndroidでMindをどうやって動かすか(2)
MindではMコードがオブジェクトコードの実体であるため、当然だがMコードファイル(.mco)の扱いが重要となる。
しかし Android OS から見た狭義のプログラムは JavaのクラスファイルとC(JNI)の共有ライブラリの2つであり当然だがMコードは関与されない。そのためファイルの設置や読み出しは自前で行う必要がある。## パッケージング
まず設置については、パッケージ(.apk)の中にMコードファイルを含めておき、アプリ起動時にそれが自動展開されるのが良いのだが、調
FlutterでReleaseビルドをするとネットが繋がらなくなる問題への対処法
# 起こっていること
https://github.com/gadgelogger/kokorahenn_flutter
ワイ「Flutter使ってこんなアプリ作ってるんやけど、そろそろ完成しそうやな」
ワイ「せや!release buildしてAndoridでチェックしたろ」
↓
ビルドしてAPKで書き出し
↓
「無事にビルドできたわ。。。。。うん???なんか店舗情報取得できねぇ。。。どうなってんだこれ???」みたいな状況が発生した。
| 正常な時 | 今回の現象 |
|:-:|:-:|
| ![Screenshot_1708617694.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657253/4008052d-f5ac-553b-94f8-8433fbd47015.png)| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657253/61980595-f873-6362-736
推移的依存関係をわかりやすくみよう
# 推移的依存関係とは
ライブラリの中でさらにライブラリが使われてたりしますよね。例えばAというライブラリの中でv1.0.0のBというライブラリが使われていたとします。
gradleを通してAのバージョンをアップデートして、Bはv1.0.0のままにしていたとしても、
アプデ後のAの中でもしv1.2.0のBが使われている場合、アプリではv1.2.0のBが使用されます。![20240222_205516.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/01c4ca30-4b3e-214a-080a-a8eacb18e4e9.jpeg)
そーゆー感じのことを推移的依存関係と言います。
「推移的」に関しては「つられてバージョンあがっちゃった💦」みたいに解釈してます。私は。# どんなシチュエーションで知りたくなる
業務で何かしらのライブラリのバージョンをアップデートするときに、つられて上がっちゃう他のライブラリちゃんがないか調べておきたいですよね。つられてあがっちゃったライブラリ
MacでAndroid Flutterの環境構築
# 1.はじめに
MacでAndroid Flutterの環境構築したので、備忘録として残しています。# 2.前提条件
Android Stdioがすでにインストールしている事。
Android Stdioのインストール手順、環境構築は割愛しています。# 3.Mac環境構築
以下のサイトを参考にして作業を実施しています。(2024.02.20時点)
https://docs.flutter.dev/get-started/install/macos
https://zenn.dev/heyhey1028/books/flutter-basics/viewer/getting_started_mac
Flutter SDKのインストール
Androidアイコンを選択する。![Flutter図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3688845/0ca8830d-1c7e-43b5-df3e-4f0688914e30.png)
Appleメニュ
[Setup] Appium 2.x + Robotframework + Windows
# Outline
これまで何度もappium , robotframeworkのsetupのドキュメントを書いてきた。
ただ、mac中心であった。今回、windows 環境で android (iOSをテストしたい場合、Macにすべし)のテストを簡単に行いたかったので、そのセットアップを残す# install
## Java
Javaをinstallする
https://www.oracle.com/jp/java/technologies/downloads/#jdk21-windows
install後、pathを設定する
| 環境変数 | 設定値 |
|:———–|:————|
| JAVA_HOME | C:\Program Files\Java\jdk-21 |
| Path | %JAVA_HOME%\bin |![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/42f6089e-722
GPT-4を使用できるAndroidアプリ
GPT-4は現在最も強力な大型モデルで、しかしOpenAIではPlus会員でなければGPT-4を使用することはできません。私たちは広告を通じて、誰でもGPT-4を使用できるように試みています。
アプリケーションは使いやすく、一つのダイアログボックスだけで、ネットワーク依存や任意の設定を必要とせず、開封すればすぐに使えます。
Google Playのアドレス:https://play.google.com/store/apps/details?id=me.app.free.gpt4
PendingIntentのフラグを理解してなかったせいで詰まった話
# 違い
公式のドキュメントのPendingIntent.FLAG_IMMUTABLEのところには次のように書かれてました。
> FLAG_IMMUTABLE only limits the ability to alter the semantics of the intent that is sent by send() by the invoker of send()意味としては、
FLAG_IMMUTABLEを設定するとsend()の呼び出しによって送信されるインテントのセマンティクスを変更する機能のみを制限します。
という感じなので、インテントの情報を変更できないよという事になる。[公式ページ](https://developer.android.com/reference/android/app/PendingIntent#FLAG_IMMUTABLE)
逆にMUTABLEの方は変更可能であると書かれているので、PendingIntent経由で何か情報を受け取りたい時はMUTABLEの設定すればよいと思われる。
# 具体例
NFCカードを読み取ろうとしている際に
Androidチームでインターンを取ってみた
## 組織とインターンの内容
私の所属するAndroidチームは私含めて社員4人に加え業務委託1人の5人チームの組織です。そこに長期のインターンとして3ヶ月〜というスパンで働いてらうという形で1人を採用しました。今まで2人のインターン生を受け入れたのでその記録を残します。### インターン生の主な業務内容
– Androidを触れたことのないインターン生であればcodelabをやってもらいAndroidを学習してもらう
– 学習が終わり次第簡単な業務から振ってチケット作成からPRマージまでの流れを学んでもらう
– それ以降は基本的には我々と同じような仕事を振って対応してもらう
– 毎日誰かと1on1をしてもらい色々話してもらう### 入ってくれた2人のインターン生のレベル
1. Kotlinに軽く触れたことがあるレベル
2. アプリを作ったことがあるし結構書ける#### うちの技術スタック
Kotlinで書かれておりUIはほぼjetpackで書かれている、UsecaseなどはRxからFlowへの以降は完了しており、RipositoryもRetrofitに対応しているしマル
Jetpack ComposeでonResume/onStartに相当する処理を実行する
lifecycleのバージョン2.7.0以降で `LifecycleEventEffect`を使うことができます。
“`kotlin
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
// do something here
}
“`“`kotlin
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
“`onPause/onStopに相当する処理が必要な場合には、`LifecycleResumeEffect`もしくは`LifecycleStartEffect`を使いましょう。
“`kotlin
LifecycleResumeEffect {
// ON_RESUME code is executed hereonPauseOrDispose {
// do any needed clean up here
}
}
“`“`kotlin
LifecycleStartEffect {
AndroidスマホにKDDI系SIMを入れたときに2重に表示されるキャリア表示を改善する
## はじめに
スマートフォンに通信キャリアのSIMを挿入すると、挿入したSIMのキャリア名が表示されるようになっていますが、一部のスマートフォンで一部の通信キャリアのSIMを挿入すると、キャリア名表示が二重に表示されてしまうことがあります。
特にGoogle PixelにKDDI系のSIMを入れると、auの場合は「KDDI – au」、UQ mobileの場合は「KDDI – UQ mobile」、povoの場合は「KDDI – povo」と表示され、キャリア表示が冗長的になってしまいます。![Screenshot_20240220-110340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715077/b5dd37fb-ac96-435e-cba6-392f84623b09.png)
本記事では、これをそれぞれ「au」「UQ mobile」「povo」の表示だけにする方法を解説します。
### ⚠︎注意
この記事ではAndroidのカスタムROMに関する事柄を記載しています。ご自身のスマ
【Flutter】テキストの装飾
Flutterでのテキストの装飾についてまとめました。
テキストサイズの記載がないものは一律「fontSize: 30」にしております。
## テキストサイズ
“`dart:書き方
Text(
‘fontSize 5’, // 表示したいテキスト
style: TextStyle(fontSize: 5), // テキストサイズ
),
“`![Screenshot_20240206_221806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3641068/e0bec6fd-b8dd-7983-d2a1-ac02566d048f.png)
## テキストカラー
“`dart:書き方
Text(
‘color red’, // 表示したいテキスト
style: TextStyle(
color: Colors.red), // テキストカラー
),
“`![Screenshot_20240206_224645.png](h
日本語プログラミング言語MindをAndroidに移植した時の記録(ステップ1/9)
# はじめに
この記事はだいぶ前(2012年)にココログの「[キリーの日本語プログラミング](http://uemon3511.cocolog-nifty.com/nihongoprogram/)」に掲載したコラムですが、再編集してこちらにも投稿します。今となっては古い話ではありますが、OSによってプログラム言語(AndroidではJava)が決め打ちされている環境で規定と異なるもの(Mind)を走らせたことの記録としてお読みください。
# AndroidでMindを動かす最初のステップ
AndroidでMindを動かしたいと思ってからもう1年半ほど経ってしまった(編集注:この時点で2012年)がようやく最初のステップまで来た。
本当に文字通り「動いた」だけで まだほんの序の口に過ぎない(^^;![s41hwscreenshotmindok20120417_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/8e3b5ec2-e99d-528d-b115-66bd12e47
Jetpack ComposeのCanvasでメーターのような可変する円を作る
# drawCircle()
“`
Canvas(
modifier = Modifier.size(250.dp),
onDraw = {
drawCircle(Color.Green)
}
)
“`
![スクリーンショット 2024-02-18 21.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/2138b393-544f-2223-e67c-3c6cb8184c14.png)可変でない場合の円の場合は**drawCircle()** または、**drawOval()** 使用すればいいのですが、メーターのように中を可変させたい場合は、**drawArc()** を使用します。
次は上のdrawCircle()を背景としてdrawArc()を使ってみましょう.
# drawArc()
“`
Column(
Modifier.size(225.dp
マルチモジュールでの依存関係の記述をいい感じにする
# マルチモジュール
マルチモジュールは、どんどん肥大化するプロジェクトにおいて効率性を維持するためにおすすめの方法です。アプリケーションを独立したモジュールに分割することで
– ビルドの高速化
– よいアーキテクチャを強制できるというメリットがあります。
一方で、モジュールの数が増えると、各モジュールでそれぞれ依存関係を管理するのは大変です。バージョンカタログを導入することによって、マルチモジュールでの依存関係を簡単に管理できるようになります。
## バージョンカタログ
バージョンカタログは依存ライブラリとプラグインのバージョンを一元管理するためのGradleの機能です。
### バージョンカタログファイルを作成
ルートの`gradle`フォルダに`libs.versions.toml`ファイルを作成します。Gradleはデフォルトでこのファイル名を読み込むので、ファイルを作成するだけで大丈夫です。
“`libs.version.toml
[versions][libraries]
[plugins]
“`### ライブラリの場合
バージョンカタロ
aboutLibrariesに手動でライセンスを追加する
# はじめに
今回は前回書いたaboutLibrariesというライセンス画面用のライブラリを使って手動でライセンスを追加する方法を紹介していきます。
一応以前に同じ記事を書いたのですが、もっと詳しく書いておこうと思ったので今回は詳細を書いていきます
### 本文
まず、プロジェクト直下に適当な名前でフォルダを作ります。
次に作ったフォルダの中で`libraries`と`licenses`というフォルダを作ります
`licenses`にはそのライブラリのライセンスが描かれたJsonを配置します。
“`json:hoge_license
{
// ライセンスの中身
“content”: “content”,
// どのライブラリのライセンスなのかを判断するためのハッシュ
“hash”: “flutter_secure_storage”,
// ライセンスのURL
“url”: “https://github.com/mogol/flutter_secure_storage/blob/develop/LICENSE”,
// ライセンス画面で表示されるライセン
Android ビルドタイプによってアプリケーションIDを変える方法
ビルドタイプによってアプリケーションIDを変える方法です。
`buildTypes`の設定したいビルドタイプに対して`applicationIdSuffix`の設定をします。
“`build.gradle
debug {
applicationIdSuffix = “.debug”
}
“``applicationIdSuffix`に設定した値が後ろに追加されます。
今回の場合は、.debugが後ろに設定されます。# 公式リファレンス
https://developer.android.com/build/build-variants?hl=ja#change-app-id
Android通知のグルーピングを制御する
Androidの通知は、3つまでは独立して表示されますが、4つ以上たまると、アプリごとにまとめられてしまいます。(API Levelで挙動が変わる場合があります)
|通知3つまで|通知4つ以上|通知4つ以上|
|:–:|:–:|:–:|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/cc2ec18d-30d4-d7fa-6547-47ba7bf7ba6d.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/e715227d-5f2e-fc51-3251-f2205aa365c8.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/3e45fc02-98b1-c655-5d33-98db3e3b4d42.png)|通知エリアが通知で埋まってしまうと、必要な通知も探せなくなってしまうの
Android Hiltの@Inject constructor とは何か
# Android Hiltの勉強をしているので、備忘録として情報を記載しています。
## Android Hiltの@Inject constructorが分からなかったのでChatGPTに質問してみました。
※余談
@をエスケープしたい場合、spanタグを利用する。https://qiita.com/xsgk/items/b41262553cbc10544c2e
### 以下がChatGPTとの会話のやり取りになります。
“`
User
Android hiltの@Inject constructor の意味を教えて欲しい。
“`“`
ChatGPT
@Inject constructorはDagger Hiltにおいて、依存性の注入を行うためのアノテーションです。
これは、特定のクラスのコンストラクタに対してDagger Hiltが依存性を提供することを示します。具体的には、クラスのコンストラクタに@Injectを付け、そのコンストラクタが依存するクラスやオブジェクトを
引数として受け取るようにします
【違いを比較】「ViewBinding」と「DataBinding」
「ViewBinding」と「DataBinding」を学習している過程でこの2つの違いは一体何なんだろうと思ったのでMENTAで契約しているAndroidエンジニアの先輩に質問して両者の違いを言語化して整理して頂きました。
### 一言で言うと「DataBinding」は「ViewBinding」の【上位互換】的な技術です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359201/1efed175-a94c-9e63-81b7-52a9ea761993.png)
しかし、エネルギー消費的な観点から「ViewBinding」で済む場合はできる限り「ViewBinding」を使うべきです。
「ViewBinding」はViewとJava/Kotlinのコードを、「DataBinding」はその上データをViewに連携させます。後者はデータの変更を監視して自動でViewに反映させる(オブザーバブルパターン)時に使うことが多いです。
「DataBinding」で検討してデータの連
【Android】xmlのコードフォーマット【随時更新】
・名前空間の宣言(xmlns)は最上位に置きます。
・タグの属性(app:とかandroid:みたいなやつ)は揃えます。一般には上から、android -> app -> tools とします。
・ファイルに未使用のimportが残っている場合は削除すべきです。
・「text_size」は通常「dp」ではなく「sp」で指定します。