Android関連のことを調べてみた

Android関連のことを調べてみた
目次

apk の中の AndroidManifest.xml を手軽に確認する方法2種

## はじめに

ビルドされた apk の中の AndroidManifest.xml に書かれている内容を確認したい!ってことありますよね。
このマニフェストファイルは勿論ソースコードの中にもあるのですが、

* ソースコードが手元にない
* 意図通りにビルドされているか実物を確認したい

とかの理由で「apkの中の」ものを見たいこともあります。
(特に現在では Jenkins などの CI/CD ツールを使って自動的に、かつ dev/prod などの接続先や debug ビルド/release ビルドなどのバリエーション違いのバイナリが生成されることもあるので)

apk を単純に unzip してもマニフェストファイルは人間が読める形にはなっておらず困ったので、調べた内容を書いておきます。

## 前提条件

* apk ファイルが PC にあること
* [Android Studio](https://developer.android.com/studio?hl=ja) がインストールされていること※

※非開発者であっても adb コマンドを使っている人であればインストール

元記事を表示

Android Chromeで混在コンテンツ(Mixed Contents)を表示する方法

# はじめに
テストサイトで画像表示されない問題がおきてしまい、テスト時に対策が必要となりました。

# 方法
1. URLに下記入力
chrome://flags/#unsafely-treat-insecure-origin-as-secure
※入力大変なら、chrome://flags、unsafelyで項目検索
2. 設定をEnabledに変更
3. テキストボックスに表示するコンテンツのURLを入力
4. 入力後、Relaunch表示されるので実行

参考
https://android.stackexchange.com/questions/224891/allowing-mixed-insecure-content-on-chrome-for-android

# まとめ
そもそも混在コンテンツとなる状況は対策しましょう
https://developers-jp.googleblog.com/2019/11/https.html
https://developer.mozilla.org/ja/docs/Web/Security/Mixed_content

元記事を表示

ChatGPTを使ってGB版風テトリス作った

作ったもの↓

環境:Kotlin +Jetpack Compose

開発期間:3週間

かかった費用:約3000円 (ChatGPT4.0 1か月/30ドル)

※自分が遊ぶ目的のためアプリ公開はしてないです。

## 開発の流れ
### ①ゲーム開発手法の決定
最初に、ChatGPTにゲーム開発手法を提案して貰った。

![①.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/75c5d676-71a3-8a6d-439d-58bc4d0f422e.png)

以前はJavaとXMLを使用したアプリケーション開発の経験があったが、折角なので新しい技術を採用することに。
今回はChatGPTの提案の中からKotlin

元記事を表示

【Android】GoogleMap上に円や線以外のものを表示する【Kotlin】

# はじめに 
今回は、前回に引き続きGoogleMap上に色々表示できるようにしていこうと思います。
前回の記事は こちら↓
**[【Android】GoogleMap上に円や線を表示する【Kotlin】](https://qiita.com/Tsubasa12/items/6c2fb5128c5562faca7a)**

# 画像

“`
googleMap.addGroundOverlay(
GroundOverlayOptions()
         .position(LatLng(35.689, 139.692), 500f)
.image(BitmapDescriptorFactory.fromResource(R.drawable.xxxx))
.anchor(0f, 1f)
)
“`
または、
“`
googleMap.addGroundOverlay(
GroundOverlayOptions()
.positionFromBounds(LatLngBounds(LatLng(

元記事を表示

Android デバイス を Intune へ 登録する(個人所有デバイス)

# はじめに
Android デバイス(個人所有デバイス)を Intune へ登録するための手順です。
この記事で紹介する方法は、以下の公開情報でも紹介されている、個人が所有する Android デバイスを 会社テナント へ Intune 登録して、BYOD の利用シーンを実現する方法です。

https://learn.microsoft.com/ja-jp/mem/intune/user-help/enroll-device-android-work-profile

これとは別に、会社が管理する Android デバイス を Intune に接続して、デバイスを全て会社の管理下に置く方法もあります。これについては、以下の公開情報で紹介されています。

https://learn.microsoft.com/ja-jp/mem/intune/user-help/enroll-device-android-microsoft-intune-app

# 事前準備

## ① Microsoft Entra テナント の手配
以下の記事を参考に、Microsoft テナント を手配して

元記事を表示

android端末のネットワーク接続を確認する

# はじめに
今回は端末がネットワークに繋がっているかどうかで処理を分けたい時に使える確認部分の実装を紹介していきます
### 本文
“`kotlin
// メンバでContextを取得
val context: Context = LocalContext.current
// 可読性を上げるために関数化
private fun isNetworkAvailable(context: Context): Boolean {
val connectivityManager = context.getSystemService(CONNECTIVITY_SERVICE) as? ConnectivityManager
connectivityManager?.let {
val nw = it.activeNetwork ?: return false
val actNw = it.getNetworkCapabilities(nw) ?: return false
return when {
ac

元記事を表示

proguard / R8 を使って、デバッグ用の処理をリリースビルド時に削除する

アプリを作っていると、デバッグログを始め、デバッグのためだけに必要な処理を書くことはよくあります。
ただ、リリースビルド版にはできるだけ影響を与えないように、可能であればそれらの処理をまるっと削除したいところです。例えばログメッセージのStringが残っているだけでもアプリ全体で見ると無視でできないサイズになっている、というのも良くあることです。
release版とdebgu版でsourceSetを分けて〜という方法もなくはないですが、異なるBuildVariantに同一のコードを置いて、それぞれをメンテナンスしていくのは非常に大変です。

proguard / R8 (以下proguard)には不要な処理を削除してくれる機能もあるので、これを使ってどんな方法があるのかを考えてみたいと思います。

# BuildConfig.DEBUGを使う

BuildConfig.DEBUGについて、デバッグビルド時には以下の様に定義されていますが

“`BuildConfig.java
public final class BuildConfig {
public static final

元記事を表示

Androidデバッグログの小ネタ

Androidではデバッグログ、Logcatへの出力をする `android.util.Log` クラスがありますが、これを直接使うことはあまりせず、独自のログ出力クラスを作る場合も多いかと思います。
そういった場合に使える、Androidでデバッグログ出力を行う上での小ネタをいくつか説明しようと思います。
最近では[Timber](https://github.com/JakeWharton/timber)を使っているプロジェクトが多いと思いますが、ライブラリプロジェクトでTimberを使うわけにはいかない状況があったり、独自の出力方法を作った方が都合がよい場合などもあります。

# コードジャンプ

Android Studio の Logcat View でスタックトレースの出力を見ると、以下のように「`ファイル名:行数`」の箇所がリンク風に表示されており、コードジャンプとして機能しますよね。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/d8b5d133-1215-c819-254

元記事を表示

Galaxy Z Fold5でProxy設定が解除されなくて困った話

## TL;DR
[Proxyman](https://proxyman.io/) 使って通信デバッグしてたら、設定からProxy解除しても内部的にProxy外れてない ということがありました。
端末固有な問題な気がしますが、内容を記事にします。

(結論: `adb shell settings` でプロキシ外した。)

# **Galaxy Z Fold5でのプロキシ設定解除問題の解決法**
プロキシを使用する際は手順に注意が必要です。Samsung Galaxy Z Fold5でプロキシマン([Proxyman](https://proxyman.io/))を使用されたところ、後でプロキシ設定が解除できなくなるという事態が起きました。
### 発生した事象
[Proxymanのトラブルシューティング](https://docs.proxyman.io/debug-devices/android-device#2.-troubleshooting)に記載されている手順に従って設定した後、設定からネットワークへと進み、プロキシ設定を解除しました。しかし、設定が解除されたにも関わらず、

元記事を表示

【Android】非推奨なgetParcelableの修正方法

# はじめに
getParcelableが非推奨になったのは1年以上前だと思いますが、Navigationを使わない画面遷移で実装していると、比較的頻繁に使いたくなる機能ではありますよね。
今回は非推奨になったgetParcelableに変わる便利なBundleCompatをご紹介したいと思います。

# 非推奨解消方法
まず、こんな感じで呼んでいたものが非推奨になっています。

“`main.kt
requireArguments().getParcelable(“key”)
“`

上記の関数定義を確認してみると、下記のように記載されています。

“`
Deprecated
Use the type-safer getParcelable(String, Class) starting from Android Build.VERSION_CODES.TIRAMISU.
“`

つまりgetParcelableを呼ぶのであれば、クラスを指定しろということなのですが、問題はTIRAMISU以上だということです。
上記説明をそのまま鵜呑みにすると以下のような実装になるかと思いま

元記事を表示

Jetpack Composeでドラッグアンドドロップを実装する

# はじめに
リスト内のアイテムのドラッグアンドドロップは結構見かけるんですが、任意のコンポーザブル同士のドラッグアンドドロップの事例を見つけられなかったので自力実装してみました。
探し方が悪かっただけで車輪の再発明になってるかもしれません。

# 動作確認環境
compileSdk = 34
targetSdk = 34
androidx.core:core-ktx:1.12.0
androidx.compose:compose-bom:2023.10.01

Pixel4で動作確認。
多分よほど古い環境でなければ動くのではないかと。

# 実装

### コンポーザブル側

“`kotlin
// 同一のDragAndDropGroupを持つDraggableからDroppableへのドラッグアンドドロップだけを処理する
class DragAndDropGroup {
val dropItems: MutableList> = mutableListOf()

fun addDropItems(rect: Rect, item:

元記事を表示

FM WhatsApp APK ダウンロード v9.95

FM [WhatsApp](https://qiita.com/whatsappgb_icu) APK ダウンロード (アップデート) v9.95 – 2024 年 1 月

**最終更新日: 2024 年 1 月 10 日**

進化し続けるインスタント メッセージング アプリの世界で、[WhatsApp GB](https://whatsgb.icu/) は友人や家族とつながるための人気の選択肢となっています。 しかし、WhatsApp エクスペリエンスをまったく新しいレベルに引き上げることができたらどうでしょうか? そこでFM WhatsApp APKの出番です。 これは、デフォルトの WhatsApp アプリが提供していないさまざまな魅力的な機能を提供する WhatsApp の修正バージョンです。

## FM WhatsApp APK 最新バージョンをダウンロード

– [ ] ダウンロード (v9.95)

ダウンロード (v20.93.03)

まとめ

FMWhatsAppとは何ですか

元記事を表示

lifecycle 2.7.0についてのメモ

# 概要

lifecycle 2.7.0がリリースされています。
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.7.0

ChatGPTにお願いした更新内容の要約は次の通りです。
1. `TestLifecycleOwner`に、状態変更とLifecycleObserverコールバック完了のためのサスペンド機能`setCurrentState()`が追加されました。
1. LiveData拡張の`map`と`switchMap`は、`distinctUntilChanged`のように振る舞い、LiveDataの値を即座に設定するようになりました。
1. `SavedStateHandle`でカスタムParcelableクラスがプロセスの死後に正しく復元されるよう修正されました。
1. LifecycleObserverに関連するProGuardの保持ルールが削除されました。
1. Jetpack ComposeとFlowで`Lifecycle.Event`と`Lifecycle.State`を観

元記事を表示

【Android】FragmentにComposeViewを乗っける場合は、ViewCompositionStrategyを指定しなければいけない【Jetpack Compose】

# はじめに

無限に忘れてしまうので、戒めの記事を書きます。

公式ドキュメントの[この部分](https://developer.android.com/jetpack/compose/interop/interop-apis?hl=ja#composition-strategy)についてです。

## 本題

FragmentやカスタムViewでComposeViewを使用する場合は、それらのライフサイクルに合わせてCompositionを破棄する必要があります。
それを実現してくれるのが、ViewCompositionStrategyになります。

“`kotlin:公式のサンプル
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme {
// In Compose world
Text(“Hello Compose!”)
}
}
“`

デフォルトでは

元記事を表示

Flutter でスナックバーが何度も表示されてしまう

こんにちは、普段は Android のアプリエンジニアをしているものです。
最近は Flutter とスマートコントラクトの開発がマイブームです。

ところで突然ですが、皆さんは rebuild に悩んだことはありませんか。
例えば rebuild が走るたびに複数回エラーのスナックバーを表示してしまったり、です。
StateNotifier を経由して画面遷移をするときにも、 State に遷移先の情報を保持しておくと複数回走ってしまったときにおかしな挙動をしてしまうことがありますね。
Jetpack Compose だったら `LaunchedEffect` などを使って recompose を凌げますが、 Flutter にはそれがなくて困りました。
なぜこんなことに・・・

そもそも何が問題なのでしょうか。

# 問題点
問題点はシンプルで
「 Widget 側で、同じイベントを意図せず複数回受け取ってしまうこと」です。
同じイベントってなんでしょうね。
ここでは Event の `インスタンス` が同じなら同じイベント、異なるなら異なるイベントと定義しておくと狙い通りの挙動

元記事を表示

FlutterでQRコードとバーコードを読み取る簡単なスマホアプリを実装する

# はじめに

この記事ではFlutterを使って**QRコード**と**バーコード**をスキャンして結果を表示するスマホアプリを作る方法について解説します。

コードをスキャンするためにここでは[**mobile_scanner**](https://pub.dev/packages/mobile_scanner)というパッケージを使います。これは比較的に新しいパッケージで人気が高まってきていますが、qiitaではまだこれに関する記事がないので自分で書くことにしました。

# 結果

今回どんなものを作るかわかるように、まずはできた結果から見せておきます。

`.apk`ファイルに出力してAndroidのスマホにアプリを入れてインストールして起動したらこうなります。

![q01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202903/20927c3d-992f-430e-d388-5d1fffa55c2a.jpeg)

そしてボタンを押したらスキャンの画面に入ります。そこで初めての場合はまずカメ

元記事を表示

iOS、Androidアプリでスクリーンショットを防ぐ

# iOS
そもそもスクリーンショットは端末の機能なのでデベロッパーの都合で禁止すべきではないし、完全に禁止というのはできない。スクリーンショットされたことを検知したりする機能もない。

画面の一部を隠すという機能もデベロッパーに提供されてはいない。

ただ、Appleが用意した`UITextField`の`isSecureTextEntry`をonにすると、そのテキストフィールドの部分だけはスクリーンショットに映らないという公式の機能がある。これをハックすると、画面の一部または全体をスクリーンショットに映らないようにすることもできる模様。

[Youtube – Prevent Screenshot – SwiftUI – Xcode 15](https://www.youtube.com/watch?v=viao1kTWBoY)
[github – yoxisem544/ScreenshotPreventing-iOS](https://github.com/yoxisem544/ScreenshotPreventing-iOS)

筆者自身も、スクリーンショットに映らないようにし

元記事を表示

【UE5】AndroidアプリにFirebaseを組み込んだら広告を使用している判定になった

## はじめに
AndroidアプリにFirebase Analyticsを組み込んでGoogle Play Consoleにアップロードしたところ、広告は全く使っていないのに広告IDの申告を更新をしなさいとエラーが出てしまいました。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637961/f612e8ae-2125-686a-dea8-a3a8e9afc026.png)

本記事では、広告IDの使用申告を更新することなくこのエラーを回避する方法を解説します。

## 開発環境
– Windows11
– UE5.1.0
– [Firebase – Features](https://www.unrealengine.com/marketplace/ja/product/firebase-features)(有料です)
– 広告を使用していないモバイルプロジェクト

## 原因
![4.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

Android-ヘルスコネクトを使って単位時間ごとのデータを取得する

## この記事はどんな内容?
– Android(Kotlin)で[ヘルスコネクト](https://developer.android.com/guide/health-and-fitness/health-connect?hl=ja)を使ってヘルスケアデータ(歩数)を取得します

## この記事でやることの詳細
– ヘルスコネクトを介して、2種類の方法でGoogleFit経由で取得している歩数データを取得します
– 基本的なデータのとり方
– 単位時間(今回は1日)ごとのデータのとり方

## 基本的なデータのとり方
[HealthConnectClient.readRecords()](https://developer.android.com/reference/kotlin/androidx/health/connect/client/HealthConnectClient#readRecords(androidx.health.connect.client.request.ReadRecordsRequest))を使用して、取得したいデータ型と期間だけを指

元記事を表示

Androidアプリで表示したHTML画面のボタンタップ時のイベント処理の備忘

# はじめに
Androidアプリの画面は、主にXMLやJetpack Composeによって構築されますが、HTMLファイルを画面として表示させることも可能です。
そのため、HTML画面の表示とボタンタップ処理の制御方法を、本記事に備忘として記載してみました。

# やりたいこと
実装する処理の順序は以下です。
[1. HTML画面のボタンタップでURLスキームが発火される](https://qiita.com/tsuna_san/items/4cbdb63cf3b0b50d6247#1-html%E7%94%BB%E9%9D%A2%E3%81%AE%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%97%E3%81%A7url%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%81%8C%E7%99%BA%E7%81%AB%E3%81%95%E3%82%8C%E3%82%8B)
[2. 発火されたスキームをアプリで検知してダイアログを表示する](https://qiita.com/tsuna_san/i

元記事を表示

OTHERカテゴリの最新記事