Android関連のことを調べてみた2023年08月25日

Android関連のことを調べてみた2023年08月25日
目次

AddROM Bypass APK は、ユーザーが Android 7 Nougat

AddROM Bypass APK は、ユーザーが Android 7 Nougat 以降のバージョンを実行しているスマートフォンやタブレットで Google FRP (工場出荷時設定へのリセット保護) ロックをバイパスできるように設計された Android アプリケーションです。 AddROM FRP ファイルは責任を持って使用することが重要です。

AddROM Bypass はすべての Android 携帯電話と互換性があり、Android Lollipop 5.0 から Android 13 までのバージョンをサポートします。

Android デバイスの Google アカウント アクティベーション ロックをバイパスするソリューションを探している個人にとって、AddROM APK の最新バージョンは実行可能なオプションを提供します。 工場出荷時設定にリセットした後に携帯電話にアクセスする際に問題が発生した場合は、このバイパス APK をダウンロードして問題を解決できます。 アプリケーションの更新バージョンには、優れた機能と、幅広い Android デバイスにわたるシームレスな

元記事を表示

Composeでラムダ式を書くとスキップされないときがあるのはなぜか

https://skyyo.medium.com/performance-in-jetpack-compose-9a85ce02f8f9

こちらの記事の中に、ラムダ式がStableになるときとならないときがあると書かれている。
これを読んだとき、よくわからないがそういうことがあるらしいというようなもやもやした理解で終わってしまっていたが、あれからおよそ10ヶ月間、いろいろ触っているうちにこういうことなんじゃないかという納得のいく仮説がひとつ生まれたのでメモしておく。

この内容に確信があるわけではなく、こうだとしたらすべてスッキリ納得がいく、というくらいのものなので、それくらいの信憑性のつもりで読んでいただきたい。

## 結論

Composeのルール上は「関数型がStableとしてみなされる」以外に特殊なことは発生していない。外部の値をキャプチャしない関数のインスタンスはシングルトンとしてコンパイルされるというKotlinコンパイラの最適化の結果、外部の値をキャプチャしていないときだけStableかのように振る舞っている

## (おそらく)Composeのルール上は「関数型が

元記事を表示

【Android】高さがwrap_contentのViewPager2を作成

# はじめに
高さがwrap_contentのViewPager2を作成する方法について解説。
例えば、ScrollView内にViewPager2を入れて高さをmatch_parentにできないことがある。
高さが決まっている場合は数値で指定すればいいが、ページ毎にビューの高さが変わっても対応できるプログラムを作成。

# コード
例として、ScrollView内にViewPager2を入れたコードを作ってみる。

ポイントは、ViewPagerのページ切り替え時(`onPageSelected`)、`binding.viewPager.layoutParams`によりViewPagerの高さを動的に変更している。

## レイアウト
ViewPager内に入れるレイアウト。動画の青と緑のビュー部分。
“`view_pa

元記事を表示

N予備校 Android アプリでビルドロジックを buildSrc から Composite Build に移行した話

#

[N予備校 Android](https://play.google.com/store/apps/details?id=nico.ed.nnn.zane&hl=ja&gl=US&pli=1)チームでテックリードをしている鎌田です。

`N予備校` Android チームでは、[Version Catalog](https://developer.android.com/studio/build/migrate-to-catalogs) の導入をきっかけに、ビルドロジックを buildSrc から [Composite Build](https://docs.gradle.org/current/userguide/composite_builds.html) に移行しました。

Version Catalog を導入したことで、buildSrc でバージョン管理する必要がなくなり、buildSrc が不要になったのと、マルチモジュール化しているのでビルド設定を共通化したかったためです。
本記事では、どのように buildSrc から Composite Build に移行したの

元記事を表示

開発中のFlutterアプリをAndroid端末でデバッグする方法

Android端末でUSBデバッグを有効にすることで、開発中のアプリをデバイス上でテストやデバッグが行えます。USBデバッグを有効にする手順と、Macでの接続方法のメモです。

# Androidデバイスでの設定:
1. 設定 アプリを開きます。
2. システム(または端末情報、About Phone)に移動します。
3. ビルド番号またはビルドバージョンを探して、それを7回タップします。これで開発者オプションが有効になります。
4. 開発者オプション(Developer Options)に移動し、USBデバッグを有効にします。
# MacとAndroidデバイスの接続:
1. AndroidデバイスをMacにUSBケーブルで接続します。
2. デバイス上でポップアップが表示された場合、「このコンピュータでUSBデバッグを許可する」を選択します。
3. ターミナルを開き、adb devices コマンドを実行して接続されているデバイスが表示されることを確認します。
もしadbがインストールされていない場合、Android StudioのSDK Managerからインストールできます。

元記事を表示

minify R8 で GSON でクラス変換をする場合の注意点

# 症状

Android アプリを 1年ぶりぐらいにアップデートしようとしたところ、Release ビルドで実行した時に json 形式のデータが正常にパースされなくなる症状に見舞われました。

# 原因

アプリのビルドタスクに、

“`
> Task :app:minifyReleaseWithR8
“`

という見慣れないタスクがあり、コレ(R8 での minify)が原因でした。

Android Gradle プラグイン 3.4.0 以上を使用したプロジェクトのビルドでは、ProGuard によるコンパイル時のコード最適化が行われず、R8 コンパイラとの連携により、minifyReleaseWithR8 タスクが実行されるようです。

https://developer.android.com/studio/build/shrink-code?hl=ja

# 必要な対策

Gson や OkHttp など、minifyの影響を受けるライブラリを使用している場合、R8 対応の proguard-rules.pro の記述内容が公開されているので、基本的にそれらを更新すれ

元記事を表示

Android 初心者が Room を使おうとしてハマったこと

※ この記事は 2023/08/14 時点の情報を元に作成しています。

Android アプリで DB 操作を行うために、Room というライブラリを利用しました。
以下の公式を参考に取り組んだのですが、一筋縄ではいかなかったので、遭遇したエラーと解消方法について本記事に記録しておきます。

[Room を使用してローカル データベースにデータを保存する | セットアップ](https://developer.android.com/training/data-storage/room?hl=ja#kotlin)

## 環境

– Android Studio Flamingo | 2022.2.1 Patch 2
– macOS 13.4.1
– compileSdk = targetSdk = 34

## 結論

`build.gradle (Project :…)`に追記する内容は、以下のとおりです。

“`gradle
plugins {

id ‘com.google.devtools.ksp’ version ‘1.9.0-1.0.13’

元記事を表示

The project is using an incompatible version (AGP 8.0.0) of the Android Gradle plugin. Latest supported version is AGP 7.3.1 の解決法

# はじめに
ある日、Anroid Studioでプロジェクトを開くとビルドエラーが発生した。。。

“`
The project is using an incompatible version (AGP 8.0.0) of the Android Gradle plugin. Latest supported version is AGP 7.3.1
“`

https://developer.android.com/studio/releases?hl=ja#android_gradle_plugin_and_android_studio_compatibility

何やらバージョンの互換性に問題があるようだ。。

# 指定されたバージョンにしてみる
`File > Project Structure > Project`を開く
Android Gradle Pluginを**7.3.1**に変更したところ、無事ビルド成功しました!
![Screenshot 2023-08-23 at 22.37.45.png](https://qiita-image-store.s3.a

元記事を表示

【Flutter】showDialogを使ってを全画面で表示させる方法

showDialogを使って全画面にDialogを表示させたい。
そもそも、showDialog自体、私たWidgetをダイアログとして表示してくれちゃうので、
ContainerのheightとwidthにMediaQueryを渡せばできると思い、やってみました。

“`dart
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(‘画像表示’),
backgroundColor: Colors.red,
),
body: Center(
child: ElevatedButton(
child: const Text(‘モーダル表示’),
onPressed: () {
showDialog(
context: context,

元記事を表示

androidのテストコードでassetsにアクセスする

# この記事の内容
AndroidTestとUniteTestの両方で、assetsにあるファイルにアクセスする方法です。
AndroidTestは、androidx.testを、UnitTestは、Robolectricをそれぞれ使用します。

androidx.testのセットアップに関しては公式をご覧ください。

https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/test-setup

## dependencies
テストの依存関係は以下の通りです。
“`gradle:app/build.gradle
dependencies {
// For test
testImplementation(“junit:junit:4.13.2”)
testImplementation(“org.robolectric:robolectric:4.9”)

// For android test
androidTestIm

元記事を表示

value class をデフォルト引数にするとNullPointerExceptionが投げられる場合がある

## 概要と結論
Jetpack Composeでvalue classをデフォルト引数ありで引数にした場合、引数指定なし(デフォルト引数を利用)で呼び出すと`NullPointerException`が投げられます。
### 解決法
`value class` でないようにすればよいです。(当たり前といえば当たり前)
* typealiasを利用する。
* data classにする。
* 等々

## 詳しく
### 経緯
[DroidKaigi2023](https://2023.droidkaigi.jp/)が今年も行われます。
contribute大歓迎ということで、私も何かしてみようと思い、挙がっていたissueを解決するPull Requestを作りました。

https://github.com/DroidKaigi/conference-app-2023/pull/756/

その際に拡張関数を用意したかったのでvalue classを使いました。
さくっと作って、PullRequestを送ったところPullRequestのUnitTestで失敗していることがわかった

元記事を表示

FlutterでAndroid端末のmulti-windowモードを検知したい

暫くQiitaを書いてませんでした。

最近のあるFlutterアプリ開発案件ですが、Androidがマルチスクリーンモードを入ると、画面の部品が崩れる事象が発生してました。

一応、Flutter側はマルチスクリーンを検知できることはない感じ…

ぐぐって見たが、
一応、Android端末のマルチスクリーンを検知できることは可能であるようですが、詳しい説明がなくてこちらで、詳細な解決案と、実装を紹介したいと思います。

Qiitaには、昔以下のような紹介がありました。

https://qiita.com/Shiozawa/items/24755e0a0eab9756a79f

但し、記事の作成時間が古くて、あんまりの助けにならない感じ???

以下のAndrodi開発者公式サイトでは、詳しく説明したようが、実装例がないぽい
https://developer.android.com/guide/topics/ui/multi-window?hl=ja

一応、実機環境では
minSDKVersion 21
targetSDKVersion 33
ではサポートされなかったので

元記事を表示

hostsを使用したローカルサーバにiPhone,Androidからアクセスする

# はじめに
この記事はMacでhostsを使用しドメインからアクセスできるようにしているローカルサーバにiPhone,Androidからアクセスする方法を記事にしています。

# 今回使用したもの
Mac OS Ventura 13.3.1
squid 5.9
iPhone,Androidなどアクセスする端末

# やりかた
方法としては、`squid`でMac上にプロキシサーバを構築し、それを経由してローカルサーバにアクセスする。

## IPの固定
各端末からアクセスできるようにMacのIPアドレスは固定にしておく。

## hostsの設定
hostsに固定したIPアドレスとドメインを追加する。
hostsは`/private/etc/hosts`にある。
“`
192.168.x.x hogehoge.com
“`

## squidのインストール
“`
$brew install squid
“`

## squidの設定
squidの設定の設定を行う。`/opt/homebrew/etc/squid.conf`を編集する。
(`/usr/local

元記事を表示

【Flutter】ContainerにImageを載せた時にRadiusが効かず闘った話

Flutterの書き方をだいぶ覚えてきた頃のことです。
画像にRadiusをつけた状態で表示したかったため、BorderRadiusをつけたContaierに画像を載せました。
その時に実装したコードはこちらです。

“`dart
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(‘画像表示’),
),
body: Center(
child: Container(
height: 300,
width: 180,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
),
child: Image.asset(
‘assets/im

元記事を表示

【Flutter】Dartの非同期処理(Future・then)

## はじめに

Flutterでアプリ開発を行うには、Dart言語の使い方を理解しておく必要があります。今回は、Dart言語の非同期処理について説明します。非同期処理は、WebAPIを叩いたり、DBやファイルの読み書き等、時間のかかる処理を行う際に使用します。

## 動作環境

Flutterで新規プロジェクトを作成し、以下の`ここに処理を書いていく`と書かれた2箇所に追加でコードを記述して動作確認していきます。画面にボタンを表示する単純なプログラムです。

“`diff
import ‘dart:io’;

import ‘package:flutter/material.dart’;

void main() {
runApp(const MyApp());
}

class MyApp extends StatefulWidget {
const MyApp({super.key});

@override
State createState() => _MyAppState();
}

class _MyAppState extends S

元記事を表示

【Android】文字入力時のキーボード操作のメモ【Kotlin】

# はじめに
Editテキスト入力時のキーボードの操作でエンターキーやバックキーなどのアクションキーが押された時の処理を完全に覚えきれず、何度も調べながら実装するのが面倒になったので 特に使いそうなものを自分の記事に残しておこうと思いました。
# 実装
自分用なのでかなり簡単にではありますが、以下が実装内容です。

editText.setOnKeyListener(View.OnKeyListener { _, action, event ->
if (event.action == KeyEvent.ACTION_DOWN) {
if (action == EditorInfo.IME_ACTION_DONE) {
// Enterが押された
}

if (action == KeyEvent.KEYCODE_DEL) {
// バックスペースが押された

元記事を表示

Android Kotlin Timberを別モジュールに導入してみた

# 初めに
Timberとはなんやら、みたいな話は既に様々な方が書いてくれてます。
そのため、割愛します。

# きっかけ
元々、僕が作っている個人アプリは、appモジュールのみで構成されてました。
ただ、今後Jetpack Composeを導入した際のプレビュー表示までの時間やビルド時間、今後仕事でマルチモジュール化の知見が求められるのでは?と考えて、マルチモジュールの学習を始めました。

とりあえず、お試しでログ機能を別モジュールに分けることにしたんですね。

# モジュール構成
とりあえず、いろんなサイト見て考えたモジュール構成。(これが良いのかよくわかってない)
水色の部分は全てサブモジュールになってて、狙いとしてはビルド時間を早めたい!ということくらい。

![名称未設定ファイル.drawio(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3355973/c8cfc845-3176-e06b-0da9-d73037547024.png)

# 手順1. 別モジュールを用意する
1.

元記事を表示

ネイティブエンジニアがFlutterでアプリをリリースした時の流れ(公開まで14日間)について

## はじめに
iOS/Androidともに個人アプリを10本程度作成してリリースした経験(androidはリリースしたアプリは全部Googleにアップデートしていないので削除された。。)があります。
しかしFlutterは3年ほど前から知見はありましたがリリースは初めてしたのでその時の流れを備忘録含め残しておきます。

業務でもネイティブ開発経験が長いです。クロスプラットフォームは昔にXamarinを少し触りましたが、いまいち良さを感じずに深く手を出しませんでした。

すでに5万とあるQRコードアプリはFlutterの練習兼ねて簡単なアプリなので作成をしました。QRコード読み込みはもはやネイティブの標準カメラでもできますが、読み込みのみで、他の同類アプリは広告が多くて邪魔なイメージがあったので作ってみました。

仕事でFlutterを教えているため、リリースの一連フローは経験しないとよろしくないという理由もありました

https://twitter.com/my

元記事を表示

Android java GoogleMAP API を使用した、アプリ制作(ゴミ処理業者 検索アプリ)

### ■ UI

・郵便番号を入力
夏目 智徹 android map app 01

・入力された郵便番号の【5km】圏内で、CSVファイルで取得した業者の経度・緯度を計算して表示する。
夏目智徹 android map app 02

・入力された郵便番号の【10km】圏内で、CSVファイルで取得した業者の経度・緯度を計算して表示する。
夏目 智徹 android map app 0</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>Android</div>
<div class='tag-cloud-link'>GoogleMapsAPI</div>
<div class='tag-cloud-link'>ListView</div>
<div class='tag-cloud-link'>android開発</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tokotoko33ok/items/8478e527675be1233b5a'>元記事を表示</a></div>
<h3 id=CameraXでAndroidのカメラを起動してみる

備忘録として、cameraXを用いてandroid端末のカメラを起動してみる。

最終的に画像認識エンジンを走らせてみたい!

以下を参考にしてみる。
[cameraXスタートガイド](https://developer.android.com/codelabs/camerax-getting-started?hl=ja#0 “cameraXスタートガイド”)

詰まった箇所

**「CameraXApp.app モジュールの build.gradle ファイルを開き、CameraX の依存関係を追加します。 」**

以下のコードをbundle.gradle.ktsに追加するのだが、エラーが出る。
“`
dependencies {
def camerax_version = “1.1.0-beta01”
implementation “androidx.camera:camera-core:${camerax_version}”
implementation “androidx.camera:camera-camera2:${camerax_version}”

元記事を表示

OTHERカテゴリの最新記事