Android関連のことを調べてみた2022年03月22日

Android関連のことを調べてみた2022年03月22日

TermuxでC言語を書く 2022

AndroidでC言語書きたいですよね.
やりましょう.

:::note warn
注意
この記事は**Termux**と呼ばれる環境でどうしてもC言語を書きたい~~変態の~~方向けの記事です.
AndroidでC言語を書くだけであれば,[Mobile C](https://play.google.com/store/apps/details?id=com.dztall.ccr.android.admob&hl=en&gl=US)などを使う方が良いと思います.
:::

# Termuxのインストール
まず,**Playストアのものは選ばないようにしましょう**.Playストアにあるものは更新がされていません[^1].

インストールは,F-Droid経由か,直接APKを用いて行います.

F-Droid:

https://f-droid.org/en/packages/com.termux/

直接APKから

https://github.com/termux/termux-app/releases/tag/v0.118.0

# Repositoryの変更
このあと直接`pk

元記事を表示

Termux: Grimler repoでGPG Error

この記事では主に

“`
W: GPG Error: https://grimler.se/… stable InRelease: The following signatures couldn’t be verified because the public is not available: NO_PUBKEY B0076E490B71616B
“`

これが出てしまう対処法について紹介します.

# Termuxのインストール
まず,**Playストアのものは選ばないようにしましょう**.Playストアにあるものは更新がされていません[^1].

インストールは,F-Droid経由か,直接APKを用いて行います.

F-Droid:

https://f-droid.org/en/packages/com.termux/

直接APKから

https://github.com/termux/termux-app/releases/tag/v0.118.0

# 始める前に
今回Repositoryの変更に必要なツールを事前にインストールするため,手順を間違えたら割と面倒

元記事を表示

【毎週公開!】AndroidDagashi PickUpOneArticle (第二回)

# この記事は
私が[Android Dagashi](https://androiddagashi.github.io/)から一つだけ記事をピックアップして読み、理解し、そして私のような初心者のAndroiderもしくはモバイルアプリ開発者が読むと仮定して、「誰でも理解できること」を目的として内容をまとめます!

今回は第二回です!

よろしくお願いします!!

# 今週のピックアップ記事
今週は、[2022-03-13](https://androiddagashi.github.io/issue/215-2022-03-13/)の記事の中からピックアップして読むことにします。

そして今回のピックアップ記事は。。。
[10 ideas to improve your Gradle build times [Part III]](https://blog.dipien.com/10-ideas-to-improve-your-gradle-build-times-part-iii-db06392f253)
です!

# 10 ideas to improve your Gradle

元記事を表示

Roomの使い方公式チュートリアルをやったメモ

# Google公式のチュートリアル
[Room とフローの概要](https://developer.android.com/codelabs/basic-android-kotlin-training-intro-room-flow?hl=ja&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-kotlin-unit-5-pathway-1%3Fhl%3Dja%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-training-intro-room-flow#0)
2画面で構成され、最初の画面に内部DBから取得したバスの時刻表(バス停名・時刻)をRecycelerViewで表示。タップするとそのバス停だけの時刻表だけを表示する。

追記:
[Room を使用してデータを永続化する](https://developer.android.com/codelabs/

元記事を表示

Hilt Unsupported metadata version in Kotlin

メモ

Hiltを使うとたまに出てくるエラー
結論、Googleドキュメントではなく以下のDagger HP の依存関係を宣言して解消

https://dagger.dev/hilt/gradle-setup

元記事を表示

Android: GitHub Actions で Gradle build daemon disappeared unexpectedly が発生しないようにメモリ使用量を調査する

Andorid Gradle プロジェクトのビルドを Github Actions などの CI で実行したとき、Host Runner のメモリが足りなくなると以下のエラーが発生し Gradle Daemon が強制終了されます。(OOM Kill)

“`shell
FAILURE: Build failed with an exception.

* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
“`

この問題を解決するには、以下の記事のように Gradle Daemon が使用する最大メモリを指定する必要があります。

https://qiita.com/irgaly/items/4c22d233caf8ec55512e

しかし、Gradle Daemon の最大メモリサイズを小さくしすぎるとビルドに必要なメモリが足りずにビルドが失敗します。

この記事では、Gradle Daemon がどれくらいメモ

元記事を表示

パーミッションチェックをシンプルに実装する為のベストプラクティス

# はじめに
パーミッション関連の実装、実装頻度が非常に高い上、少々大変だったりしますよね。
最近ではパーミッション確認時の選択肢が増えたり、onRequestPermissionsResultがdeprecatedになったりと、この辺りの文化も変わっている印象です。
そんな中で、とてもシンプルにパーミッションチェックを実装できる、ベストプラクティス的な実装をご紹介したいと思います。

# 実装方法
まず、[PermissionsDispatcherKtx](https://github.com/permissions-dispatcher/PermissionsDispatcher/tree/master/ktx)を導入します。

“`
dependencies {
implementation “com.github.permissions-dispatcher:ktx:${latest.version}”
}
“`

次に、以下を変数として定義します。
“`
private val checkPermissions by lazy {
constructPermi

元記事を表示

Kotlin coroutinesを用いたTestで、処理が思うような順番で実行されない時の対処法

## はじめに
ViewModelでよくあるようなパターンの、suspend functionではなく内部でコルーチンを起動しているようなメソッドを書くときに詰まったのでメモ用に投稿します。
“`kotlin

class SampleViewModel(
private val sampleApi: SampleApi
) : ViewModel() {
private val _sampleStateFlow = MutableStateFlow(false)
val sampleStateFlow: StateFlow()
get() = _sampleStateFlow

fun sample() {
viewModelScope.launch {
_sampleStateFlow.value = true
}
}
}
“`
こういうメソッドではメソッドの内部でコルーチンを起動している関係上、sample()内部の処理が完全に終わった後にその

元記事を表示

ラムダ式について

# 初めに
ラムダとは何か につまづいた時に自分なりに調べ、今後迷った時に見返すために記事を残します
他の方の記事では詳しく、わかりやすく載っていますが
自分の中で特に必要だと思う部分をまとめます。同じようにラムダ式で躓いている方の参考になるかは、わかりませんがご了承ください

# 早速

“`
val aaaaa = {name: String-> “名前は${name}です”}
“`
簡単に説明していきます
{}の中が無名関数と言われる**関数**で {}で囲む書き方を**ラムダ式**と呼びます
ラムダ式の中でパラメータname の型を指定することで ””内のnameの型推論をしてくれます
ラムダ式では最後の行 上の文で言うところの””の中が自動的に戻り値になります
それに従い return は不要になるため ラムダ式ではreturnは使えません

“`
val aaaaa: (String)-> String = {“名前は${it}です”}
“`
引数が一つの場合は it で引数を扱うことができます

# 参考にした記事
[[Kotlin] 第一級オブジェクトとは

元記事を表示

AndroidスマホでのUI変更 G-Visual-Mod

# なぜこのページを作ったか
GVMをどこからダウンロードすればいいのかわかりずらかったから。
# できること
![画像](https://forum.xda-developers.com/proxy.php?image=https%3A%2F%2Fi.imgur.com%2FB5XZBfZ.png&hash=9e6ccda5dd6f1d6c9e71681ffe7d01e1 “こんなことができます”)
詳細はXDAを[こちら](https://forum.xda-developers.com/t/module-g-visual-mod-systemlessy-customize-your-androids-visual.4225571/)からどうぞ
私のMi11 Lite 5GのカスタムRom Pixel ExperienceではUI Radiusがコントロールセンターで正常に機能しませんでした

# 動作要件
Magisk 20+
Android Pie (9) and higher
Android Q (10) & Android R (11) for Pill Gesture M

元記事を表示

つかめエンジニアドリーム

*こちらの記事は転職ドラフト体験談投稿キャンペーンに参加しています(https://job-draft.jp/articles/251)

## はじめに
転職ドラフトを利用して、転職に成功(年収が2.4倍)したので、心境の変化の備忘録+異業種からエンジニアにジョブチェンジした方の参考になるんじゃないかな、と思い記録します。
興味ある箇所だけ読んでもらえれば幸いです。皆様が気になろうであろう年収についても、包み隠さず公開したいと思います。
よくある「エンジニアにジョブチェンジして成功しました」という自慢記事です。

## 経歴・職歴
|年|所属先|業務内容|
|:-|:-|:-|
|2011.04~2016.03|大阪の某国公立大学|学生(文系)|
|2016.04~2020.12|電子部品の専門商社(1社目)|営業|
|2021.01~2022.03|スマホアプリ専門の受託開発会社(2社目)|Androidエンジニア/PM/営業|
|2022.04~|自社開発Web企業(3社目)|Androidエンジニア|

### 大学時代
– 大学時代は、特に目的意識もなく、だらだらとバイトし

元記事を表示

ViewPager2でスワイプで画面切り替えを無効にする方法

今回はViewPager2で作ってみようと思った時に、スワイプで画面を切り替えるのではなく、自分で用意したナビゲーション処理で切り替えたかった為、調べたメモです。

# setUserInputEnabled
ViewPager2にはsetUserInputEnabledが用意されてます。

“`
binding.viewPager2.isUserInputEnabled = false
“`

ViewPager2への移行をしていないので、これから使用していきたいと思います。

# 公式リファレンス

https://developer.android.com/reference/kotlin/androidx/viewpager2/widget/ViewPager2?hl=ja#setuserinputenabled

元記事を表示

Flutterでパッケージネームをcom.exampleからオリジナルに変更したら起動しなくなった(Android)。

# 解決策
android/app/src/main/kotlin/MainActivityもしくは、
android/app/src/main/Java/MainActivity
を開いて、パッケージネームをオリジナルのものに変更する。
そして、
android/app/src/main/AndroidManifest.xml
のapplicationタグの下のactivityタグのandroid:nameが”.MainActivity”じゃなかったら、”.MainActivity”に変更する

元記事を表示

[Android Studio] エラー “…” is translated here but not found in default locale

# 概要
Resourceのstrings.xmlで問題が無いのにエラーの波線が表示されました。
![スクリーンショット 2022-03-19 22.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/bcf0cae9-6f18-6f66-4645-3e9d70acb7f5.png)

エラー文はこんなのが表示されました。
“to_do_logo” is translated here but not found in default locale

# 解決方法
そのままでアプリを実行すればエラー表示は消えました!

stack overflowを見てみると、他にも解決方法はあるようです。
とりあえずこちら側に問題があって発生するエラーでは無いようです。
https://stackoverflow.com/questions/50027691/is-translated-here-but-not-found-in-default-locale-error-in-strings-

元記事を表示

Android keystore コマンドラインから作成

Javaがインストールされているか確認
(インストールされてない場合は こちら からインストール)
“`
$ java –version
java 17.0.2 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
“`

キーストアを生成する
( ※ `-storetype JKS` を指定しないとUnityで上手く読み込めなかった
“`
$ keytool -genkey -v \
-keystore keystore_name.keystore \
-storetype JKS \
-storepass XXXXXX \
-alias alias_name \
-keypass XXXXXX \
-keyalg RSA \
-validity

元記事を表示

ローカル起動のサーバー/フロントアプリケーションをAndroidエミュレータのWebViewで開く

# 0. 概要
掲題の通り、ローカル起動のサーバー/フロントアプリケーションをAndroidエミュレータのWebViewで開く場合、
iOSシミュレーターで開く場合と違っていくつか設定が必要だったのでその方法を記載します。

# 1. http通信を可能にする
Android9以降ではhttp通信がデフォルトで無効になったそうです。
Ref: https://developer.android.com/training/articles/security-config?hl=ja

取り急ぎローカル環境で動作確認がしたいだけなので、以下の設定を追記して有効にします。
本来無効にしておく方が望ましいので、あくまで開発時だけに留める方が良いと思います。

`AndroidManifest.xml` のapplicationタグに `android:usesCleartextTraffic=”true”` を追記します。

“`
リンクにマルウェアまたはフィッシングが仕込まれたか検出する方法

# 利用ライブラリ
[Safety Detect](https://developer.huawei.com/consumer/jp/hms/huawei-safetydetectkit/)

### 対応端末
すべてのAndroid端末

### 対応OS

– Android 4.4

# 実装手順

## 前準備
(1) Huaweu Developerを登録します。

(2) AppGallery Connectでアプリのプロジェクトを登録します。
スクリーンショット 2020-10-01 155726.png
スクリーンショット 2020-10-01 155747.pngJetpackComposeでDpからPxを簡単に計算する拡張関数

毎回LocalDensityを使用して取得するのは面倒なので拡張関数にする
“`kotlin
@Composable
fun Hoge(){
val size = 10.dp
val sizePx = with(LocalDensity.current) { size.toPx() }
}
“`
以下のような拡張関数を作成する
“`kotlin
@Composable
fun Dp.toPx(): Float = with(LocalDensity.current) { this@toPx.toPx() }
“`
使い方
“`kotlin
@Composable
fun Hoge(){
val size = 10.dp
    val sizePx = size.toPx()
}
“`

【Android】DrawableからBitmapに変換

# png → bitmap
“`Kotlin
fun getBitmap(@DrawableRes drawableRes: Int) =
BitmapFactory.decodeResource(context.resources, drawableRes)
“`

# xml → bitmap
“`Kotlin
fun getBitmap(@DrawableRes drawableRes: Int): Bitmap? {
val drawable = getDrawable(context, drawableRes) ?: return null
val canvas = Canvas()
val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
canvas.setBitmap(bitmap)
drawable.setBounds(0, 0, drawable.intrinsicWidth, drawa

元記事を表示

【Android】Googleマップアプリ駅の出発案内画面へのショートカットを手動で作成

# 問題
純正の「ショートカットを作成」ボタンで作成したショートカットは動作しなくなったりする
# 解決への導き
現在のAndroid Googleマップアプリは、駅を選択するとデフォルトで出発案内画面が表示される
# 解決
代わりにその駅の **Googleマップ 場所のURLリンク** をブックマーク等の形式でホームなどに配置
# 解決: 操作方法の一例
– Chrome(PC / Android)でGoogleマップ(WEB, デスクトップ版)を開き、駅をクリックし、駅の詳細画面を表示させ、共有ボタンをクリック。
– **場所のURLリンク** が表示され、それをコピーして保持しておく。
– Taskerアプリでタスクを新規作成。アクションは「URLを開く」を1つ追加。URL入力欄に上のステップで取得したURLを貼り付けて保存。タスクを再生(実行)し、Googleマップアプリ駅の出発案内画面が表示されることを確認。(タスクを保存し、「戻る」ボタンでTaskerを閉じる)
– Launcher(ホームアプリ)でショートカットを追加>Taskerタスク>上のステップで

元記事を表示

OTHERカテゴリの最新記事