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

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

[Android]Build Variant(ビルドバリアント)のあれこれ

今までビルドバリアントについて知らなかったので色々調べたまとめ。
個人的備忘録として記事にします。
この記事はGroovyではなくKotlinでの設定方法を書く。

# ビルドバリアントって?
> ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが限定された無料版と、より多くのコンテンツを含む有料版の両方を作成できます。API レベルまたは他のデバイスのバリエーションに基づいて、異なるデバイスをターゲットとするアプリの異なるバージョンをビルドすることもできます。

とあるように、これを設定しておくと1つのアプリで複数のバージョンを作ることができる。

AndroidStudioでは以下の場所で現在のビルドバリアントを確認できる

* 現在のビルドバリアントの確認。この画像だとdebugが選択されている
packaging.resources.excludesに複数セットする

# 目的
備忘です。packaging.resources.excludesで複数セットするやり方がわからなかったので。

# 環境
– Android Studio Hedgehog | 2023.1.1 Patch 2
– Windows11 Pro

# コード
Android Studioのテンプレートからポチポチしていき、Kotlin DSLを選ぶとデフォルトで次のように記載されています。
“`kotlin
packaging {
resources {
excludes += “/META-INF/{AL2.0,LGPL2.1}”
}
}
“`

javamailを使う関係で、JavaMailライセンスファイルをピックしろって書いてあるので、なんとかぶち込まなきゃいけないのですが、色々調べてもpackaging.resources.excludesに複数セットする方法が見つかりませんでした。合ってるかわかないけど、次のとおりやってみたら、大丈夫そうでした。(ちゃんと理解できてないけど、エラー吐かないから良しとします・・・。)

“`ko

元記事を表示

Android Studioをアップグレードするときのkeymapなどの設定を保持する方法

Android StuidoのJellyfishがstableになりました🎉
iguanaのstable releaseから2ヶ月くらいしか経っていないような気がします。早いですね。

新しい環境は非常にありがたいですが、前回もなんとなくアップデートしてkeymapが移行できず、またダウングレードしてからやり直していたので、簡単ですがメモとして残します。

まずアップデートする前に、設定ファイルをエクスポートしておきましょう。

File -> Manage IDE Settings -> Export Settingsとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1165483/9c06fea3-d540-14c1-3ac1-20584d0733cd.png)

次にアップデートすると、keymapが変わってしまうことがあるようです。自分はカスタムのkeymapを作っているのですが、強制的にmacOSというテンプレートに戻ってしまっていました。

エクスポートしたのと同じ

元記事を表示

Android Studioの設定を修復する

Android Studio Jellyfishにアップデートしたところ、設定が吹き飛んでしまった。その時のメモ。
– Mac、JetBrains Toolboxでの環境を想定しています

## 手順

1. Android Studioを起動する
2. File → Manage IDE Settings → Import Settings
3. 復元したいAndroid Studioのバージョンのフォルダを選択

`~/Library/Application Support/Google/`以下に設定ファイルが保存されているようです。

元記事を表示

detekt の特定の Issue がプルリク差分から検出されたら、CI を失敗にする(シェル芸)

# 経緯

Kotlin 言語で作られた大規模なプロジェクトがあり、その中に不適切な実装(該当 Issue)が1種類ですが多くの箇所にありました。それらを修正したいですが、すべてを修正する工数は取れなそうです。よって新機能開発や機能改修のついでに、そこも修正できるチーム開発体制を作ろうと思います。Kotlin の静的解析ツール [detekt](https://github.com/detekt/detekt) に該当 Issue を検出させて、[reviewdog](https://github.com/reviewdog/reviewdog) や [Danger](https://github.com/danger/danger) でプルリク差分にそれがあればコメントで指摘する [GitHub Actions](https://docs.github.com/ja/actions) の設定を行いました。しかしコメントも見落とされる可能性があるので、プルリク差分の中に該当 Issue があれば CI を失敗にして、強制力を持たせてみようと思います。

## 注意点

– 言うまでも無

元記事を表示

【Flutter】Patrolでテストを書く(導入まで)

## はじめに
Flutterの[Finder](https://api.flutter.dev/flutter/flutter_test/Finder-class.html)や[WidgetTester](https://api.flutter.dev/flutter/flutter_test/WidgetTester-class.html)ではネイティブビュー(OSの権限許可ダイアログ等)を見つけたり操作することができません。
そこで、[patrol](https://patrol.leancode.co/)を使用して操作できるようにしたいと思います。

本記事では`patrol`を導入し、iOSとAndroidのセットアップまで進めます。

## 環境
・flutter: 3.19.6
・dart: 3.3.4
・patrol: 3.6.1
・patrol_cli: 2.7.0

## `patrol`、`patrol_cli`のインストール

### `patrol`を追加

“`
flutter pub add patrol –dev
“`

※Android SDK

元記事を表示

WSL2でAOSPをビルドしてみた

はじめに
ドキュメントがあるので、基本的にはこちらを見たほうがいいと思います
この記事は忘備録です…

https://source.android.com/docs/setup/start/initializing?hl=ja
https://source.android.com/docs/setup/build/building?hl=ja

0.環境
ビルドした環境は以下になります
“`
$cat /etc/os-release
NAME=”Ubuntu”
VERSION=”20.04.6 LTS (Focal Fossa)”

$ uname -m
x86_64
“`

1.wslのメモリの割り当てを変更する

aospは非常に巨大なプロジェクトのため、できるだけ多くのメモリを割り当てることをお勧めします
“`.wslconfig
[wsl2]
memory=32GB
“`

2.必要なパッケージをインストールする

“`sh
sudo apt update
sudo apt-get install git-core gnupg flex bison

元記事を表示

Androidプロジェクトでbuild-logicの整理をしたときのメモ

Androidでマルチモジュールを作ると、build.gradle.ktsの記述を共通化したくなる。業務のプロジェクトでbuild-logicを使って共通化していたものの、はっきり理解できていないところがあったので、[now in android](https://github.com/android/nowinandroid)や[Droidkaigi 2023](https://github.com/DroidKaigi/conference-app-2023)のリポジトリを眺めたりしながら、[個人のリポジトリ](https://github.com/hiroaki404/PublicPlayground/tree/main)を作って探索した。(publicリポジトリなので自由にみていってください)

基本的な使い方はここでは言及せず、気付きについてメモを残す。

## buildSrcのやり方と、convention plugin(build-logic)を使うやり方
convention pluginは、特定プロジェクト用途のpluginのこと。

[どの方法で柔軟にAndro

元記事を表示

WebViewでUserAgentを設定する

# はじめに
今回はWebView内の通信でUserAgentをカスタマイズする方法を紹介していきます
### 本文
`webViewClient.settings.userAgentString`で取得と上書きをすることができます。
そのため、下記のようにするとhogeのみが登録されてしまうので、上書きをしたくないのであれば、取得したものを追加で入れる必要があります
“`kotlin
webViewClient.settings.userAgentString = “hoge”
“`
### 最後に
今回はretrofitではなく、WebViewでの設定方法を紹介しました
どなたかのお役に立てればさいわいです

元記事を表示

ホーム画面のアプリアイコンに通知数などを表示する(バッジ)【Kotlin】

ShortcutBadgerというライブラリを使用して表示させます!

https://github.com/leolin310148/ShortcutBadger

手順は公式のGithubにある通り進めていきます。

# 準備

build.gradleに

“`php:build.gradle
android {

repositories {
mavenCentral()
}
}

dependencies {
implementation “me.leolin:ShortcutBadger:1.1.22@aar”
}
“`
↑を追加

準備の際いろいろ手こずったのですが、詳しくは以下などを参考にしてください

https://zenn.dev/y_mimura/scraps/d75609a474d35c

https://stackoverflow.com/questions/69163

元記事を表示

使えそうなadb command

# 目的
個人でAndroidアプリを作っているが、
デバック用のコマンドをいろいろ調べるのが面倒だな?
じゃあまとめてしまおう!
という完全自分用の備忘録が派生したもの。

そのため、コマンドに偏りがあるかもしれないが、そこはご了承をば。

随時更新予定

## adbコマンドとは
Android Debug Bridge の略。
開発環境でAndroidデバイスと通信するためのコマンドラインツール。
Androidアプリを開発する場合、adbコマンドを使用してAndroidデバイスを操作することが可能。

## コマンド
– 接続されているデバイス表示
“`
$ adb devices
List of devices attached
emulator-5555 device
“`

– アプリのインストール
“`
adb install
“`
※※インストールオプション※※

– testアプリのインストール(-t)
:::note warn
下記のエラーが出る場合のみ
adb: failed to install debug.apk:
F

元記事を表示

Flutter の 2 つのウィジェットについて

## 概要

Flutter の 2 つのウィジェット、StatelessWidget、StatefulWidget についてまとめてみました。
特に StatefulWidget のライフサイクルについて深掘りしてみました。

## StatelessWidget とは

– 状態を持たないウィジェット
– 一度描画されるとその後、状態が変化しない
– 例)固定のテキスト表示、アイコン・画像など

## StatefulWidget とは

– 状態を持つウィジェット
– ユーザーの操作や時間の経過などによって、状態が変化し、見た目や振る舞いが変わる
– 例)チェックボックス、テキストフィールド、カウンターアプリなど

## StatefulWidget のライフサイクルについて

ここでは StatefulWidget のライフサイクルについて深掘りしていきたいと思います。

緑の図形で記載したのが状態、青の図形で記載したのが各状態で呼び出されるメソッドになります。

![スクリーンショット 2024-05-05 10.47.02.png](https://qiita-image-

元記事を表示

navigation-compose にも「Safe Args」が導入されたので検証してみた

## 概要

先日リリースされた、[Navigationライブラリーの 2.8.0-alpha08](https://developer.android.com/jetpack/androidx/releases/navigation#2.8.0-alpha08)から `navigation-compose` でも型安全機能である、 `Safe Args` が導入されたため、検証してみました。
従来の `navigation-compose` では、画面遷移時に引数を渡す際に型チェックが十分に行われず、意図せぬ型エラーが発生してしまう可能性がありました。しかし、 `Safe Args` の導入により、安全に引数を渡せるようになり、アプリ開発における保守性と安全性が大幅に向上します。

## Safe Argsとは?

Navigation Fragment 時代には、`Safe Args` を使用することでデータ渡しを型安全で受け渡しすることができました。

### 実装例

“` HomeFragment.kt
override fun onClick(view: View) {

元記事を表示

IntelliJ IDEAでもAndroid開発できますよ?

# はじめに
みなさんAndroidの開発をされている際、IDEは何を使用されていますか?
もうほとんどの方がAndroidStudioを使っているんじゃないかと思いますが、中にはEclipseを使っているという猛者もいらっしゃるかもしれません。

そんな中で私はフッと疑問に思いました、 AndroidStudioと開発元が同じであるIntelliJ IDEAでもAndroid開発できるんじゃないか、と、、、。

はい、結論から申し上げると、IntelliJ IDEAでもバッチリAndroid開発できます!
そこで今回はIntelliJ IDEAを使用してAndroidの開発環境を構築し、ビルド実行できるようになるまでの手順をまとめてみたいと思います。

# 導入準備
今回の検証はMacを前提としてご説明します。

IntelliJ IDEAでAndroid開発を行う為にはまず、開発環境へプラグインを導入する必要があります。
導入が必要なプラグインは2種類で、以下になります。

– [Android](https://plugins.jetbrains.com/plugin/22989

元記事を表示

Navigation Composeが型安全になったよ

# はじめに

[Navigation 2.8.0-alpha08](https://developer.android.com/jetpack/androidx/releases/navigation?hl=ja#2.8.0-alpha08)で、Jetpack Composeでも型安全なナビゲーションが可能になりました。

https://x.com/AndroidDev/status/1786063099545468993

## Navigation Compose

ナビゲーションは以下の3つのコンポーネントで成り立っています。

– ホスト(NavHost)
現在のデスティネーションを表示するUI要素
– グラフ(NavGraph)
アプリ内のすべてのデスティネーションを定義するデータ構造
– コントローラ(NavController)
デスティネーション間の移動を中央で管理するもの

型安全になることによって大きく変わるのは、デスティネーションを定義するグラフの部分です。

これは、従来のグラフの書き方です。

“`kotlin
composable

元記事を表示

スマホからミュージックファイルを移行する

## きっかけ
某PC不要でスマホにCDを取り込める製品・アプリを使用して音楽を楽しんでいたところ、
スマホのストレージが逼迫してしまったためどうにかデータを保持したま移行を行いたかった

:::note warn
 製品としては下記作業は非推奨のため、
 移行が完全に完了するまでは、移行元のファイルは消さずに作業する
:::

## 作業環境
 ■PC
   OS:windows11
 ■スマホ
  HW:Redmi Note 10T
  OS:android Ver13

## 作業工程
### 0.事前準備
#### 0-1.移動すべきファイルがどこにあるのかを確認する
 スマホの画面から[設定]-[アプリ]-[アプリを管理]を開き、左上の・・・を開き、プロパティ画面を開く

#### 0-2.APK名を確認する
onFieldSubmitted時にテキストをクリアする方法

# 概要
Flutter初心者によるFlutter初心者のための記事になります。
TextFormField使ってonFieldSubmittedを発火させた後に入力した文字消えないの気持ち悪いなと思って調べてみました。

# 実装
TextFormFieldのテキストをクリアするには、TextEditingControllerを使います。

実装方法は下記になります。

“`dart
final _editController = TextEditingController();

TextFormField(
controller: _editController,
onFieldSubmitted: (text) {
// 〜〜〜〜〜〜〜
_editController.clear(); // TextFormFieldのテキストをクリア
},
),
“`

実際の動きはこんな感じになります。
![qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

【Android】アプリ署名時の証明書情報を確認する

Androidアプリの署名時の証明書の情報(ハッシュ値など)を確認する方法を記載します。

# 環境

この記事の作業は、以下の環境で実施しました。

– macOS Ventura
– Android Studio Iguana 2023.2.1 Patch 1
– Android SDK Build-Tools 34.0.0
– OpenJDK 17 (OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS))

# 署名の確認方法

## `apksigner`を使う

apksignerは、Android SDKに付属しているツールです。
v2以降のスキームを使用した署名がされている場合はこちらを使う必要があるようです。

インストールされているBuild-Toolsのバージョンによってパスは変わりますので適時置き換えてください。

“`sh
$ ~/Library/Android/sdk/build-tools/34.0.0/apksigner verify –print-certs -v

元記事を表示

Dagger Hiltを使いましょう

Androidで依存関係の注入(Dependency Injection : DI)を行う場合、第一候補に上がるのは**Dagger Hilt**だと思います。

https://developer.android.com/training/dependency-injection/hilt-android?hl=ja

公式ドキュメントも充実しており、Codelabも提供されています。ただ、私の場合、自分のアプリにどうやって適用すればいいのかなかなかイメージができず、理解するのにかなり苦労してしまいました。
こういう説明をされていれば自分も理解が捗ったかもしれない、という内容を書いてみようと思います。
ただの自己満足なので、逆に分かりにくかったらごめんなさい。

# インターフェイスと実装を分離する

依存関係の注入を使おうとする動機を端的に言えばインターフェイスと実装を分離したい。ということだと思います。
たとえば、以下のようにRepositoryクラスを定義して

“`kotlin
class FooRepository {
override fun doSomethi

元記事を表示

[Android] ViewPager2 無限スクロール

![](https://velog.velcdn.com/images/rmsxo5678/post/399c2b7c-d33a-4b57-8c40-7ce679bbd002/image.gif)
# *無限スクロール*

APIを通じて画像を読み込んで、読み込んだ画像とテキストを無限スクロールできるようにするために、画像とテキストビューの位置がそれぞれ異なるため、アイテムを別々に作成して設定しました。

インジケータは読み込む画像の数に応じて設定される必要があり、TabLayoutMediatorを使用すると無限に増えてしまうため、コード内で実装する必要がありました。また、ボタンを作成して、クリックすると画像が切り替わるようにしました。

コールバックを通じてメイン画像の位置を通知し、テキストとインジケータを設定します。

APIで読み込む画像は数が増える可能性があるため、サンプルでは内部画像でビューモデルやデータクラスなどは削除されており、静的ですが、アイテムの数に応じて動的に変更し、状況に応じて修正する必要があります。


## *ViewPager2*
MainFr

元記事を表示

OTHERカテゴリの最新記事