Android関連のことを調べてみた2021年10月12日

Android関連のことを調べてみた2021年10月12日
目次

Google Play Console経由でaabファイルをインストール

# はじめに
bundletoolを使う方法は下記に掲載されている。
https://qiita.com/ikemura23/items/9b6064cb123edc1e233f

ここではGoogle Play Console経由でインストールする方法を解説する。

# インストール方法

1. Google Play Consoleのアプリ画面からメニューを開き、App Bundle エクスプローラを選択。
![app_bundle_explorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f9749f46-b083-24d8-56a9-3b1a42e00ac9.png)

2. アップロードボタンからaabをアップロード
3. ダウンロードタブのアクセスを管理から、ダウンロードしたいGoogleアカウントを追加
4. ダウンロードタブの`共有可能なリンクをコピー`からダウンロード

元記事を表示

【Android】「java.lang.AssertionError java.lang.NoSuchFieldException」が出たときの対処法

Androidで「java.lang.AssertionError java.lang.NoSuchFieldException」が出たときの対処法をご紹介します。

## 環境
Android Studio 4.1.3
kotlin 1.4.32
java 1.8.0_241

## 現象
Androidアプリの評価のため社内リリース版を公開して使用していると、ある箇所でアプリが強制終了しました。
そこでデバッグを有効にしてログを確認してみると以下のエラーが出力されていました。

“`
java.lang.AssertionError java.lang.NoSuchFieldException: Open
“`
「Open」は自分で定義したenumクラスの定数の一つです。
デバッグ版ではこのようなエラーが出ていなかっため、気づかずに社内リリースしていたようです。

## 解決法
[こちらの質問](https://stackoverflow.com/questions/57790047/getting-java-lang-assertionerror-java-lang-nosu

元記事を表示

【Android】ツールバー(Toolbar)にアプリアイコンを表示しサイズを調整する

#はじめに
最近の Android は Material Design を適用することが多くなっています。
また、アプリアイコンには Android7.0 でラウンドアイコン(Round Icon)が登場して、Android8.0 ではアダプティブアイコン(Adaptive Icon)が登場しました。それによってOSごとに表示されるアイコンも変わります。
今回は普通のアイコンとアダプティブアイコン、ベクター画像といったどんな形式のアイコンにも対応できるツールバーのアイコン制御方法を紹介しようと思います。

[【公式ドキュメント】アダプティブ アイコン](https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive?hl=ja)

#サンプルアプリを作成
今回は簡単に Android Studio から New Project でサンプルアプリを作成します。
シンプルなアプリの「Empty Activity」を選択しました。
![New_Project.png](https://qiita

元記事を表示

初めてGithub ActionsでCIとやらをやってみた

#CIとは?
そもそもCIとは何なのでしょうか。正直私も今回初めてCIを扱うので腑に落ちる理解はできていませんが、すごく簡単にいうと自動的にアプリが正常かどうかチェックしてくれるシステムかなと考えています。

#GitHub Actionsを利用してCIをセットアップできる
CIを行うには様々なツールが存在するみたいですが、Github Actionsを利用すると他のCIツールと同じようにプッシュやプルリクなどの操作をトリガーにして処理を実行させることができます。

#セットアップしてみよう
CIを導入したいプロジェクトのリポジトリに行くと画面上部にActionsというタブ?があるのでそれをクリックします。

これをクリックするとワークフローをセットアップしようねみたいな画面が出てくるのでその中から自分が作成したプロジェクトの言語と

元記事を表示

[Flutter]Androidでデバッグ実行しても、エラー発生もなしでインストール状態が続く

## 概要

– Androidでデバッグ実行しても、エラー発生もなしでインストール状態が続く

## 環境
– Mac OS Big Sur 11.6

## 原因

– 裏でアプリのキャッシュデータみたいなのが残っている可能性がある

## 対策

– adb uninstall ${packageName}

で Successと表示されればデバッグ実行できるようになる

## 参考

– https://stackoverflow.com/questions/51809421/flutter-is-not-able-to-install-the-apk-into-the-real-device-suddenly

元記事を表示

ZOZOのアプリのUIを再現しようの会 【お気に入りタブ編】その1

##はじめに
知り合いのAndroidエンジニア方たちとZOZOTOWNのアプリのUIを再現しようというハッカソン的なことを始めました。そこで実装していく上で考えたことや詰まったことなどを何回かに分けて記事として投稿していこうかなと思います。

ZOZOTOWNのアプリは画面下に5つのタブがついています(著作権的なことが怖いので画像は載せません?‍♂️)。今回は一人が一つのタブ毎の画面を担当するという構成になりました。僕はお気に入りタブの担当になったので、お気に入りタブに関して書いていきます!

今回はTabLayoutとViewPager2の接続部分をやっていこうと思います。

##今回の完成像

今回の完成像

##全体の構成
TabLayout + ViewPager2 + FragmentStateAda

元記事を表示

Android: SDK Managerに含まれていないCMakeバージョンを使用する

私はFlutterでアプリを開発しているのですが、依存するライブラリがC/C++のコードを含んでおり、Android向けのビルドではCMakeのバージョンも指定されていました。Android Studioで該当バージョンのCMakeをインストールしてもエラーでビルドできなかったため独自にインストールして対応しました。[^1]
私がAndroidのネイティブ周りに明るくないこともあり手こずったのでメモしておきます。

#環境
– macOS 11.6
– Android Studio 4.1.1

#Androidのdevelopersサイト
CMakeのインストール方法について[公式の開発者向けサイト](https://developer.android.google.cn/studio/projects/install-ndk?hl=ja#kts)にも以下のような記述があります。

>
1. CMake の公式ウェブサイトから CMake をダウンロードしてインストールします。
2. Gradle で使用する CMake バージョンをモジュールの build.gradle ファイルで

元記事を表示

Play App Signingで登録されている署名のSHA1のハッシュ値を取得する方法

Play App Signingで登録されている署名のSHA1のハッシュ値を取得する方法がわからなかったので調べてみました。

まずは、Play Store ConsoleのPlay App Signingのページに記載されているSHA1のフィンガープリントをバイナリーエディタに貼り付けて、保存。ここではファイル名をsha1.binとします。
その後以下のコマンドで、base64.txtにハッシュ値を出力します。

“`
openssl base64 -in sha1.bin -out base64.txt
“`
以上です!

元記事を表示

Pepper SDK入門(33) LookAtで見えないもの以外を見つめる

#はじめに
LookAtは特定の物や人を見たり、頭部とホイールでそれをトラッキングしたりするのに用いられます。魑魅魍魎や未確認生物の類は見えないはずですが、逢魔時とか丑三つ時とかに試してみるといいかもしれません??
下はLookAtアクションをPepperに実行してもらう場合のサンプルコードです↓

“`java
//LookAtのためのターゲットフレームを取得
Frame targetFrame = …;

//アクションをビルド
LookAt lookAt = LookAtBuilder.with(qiContext)
.withFrame(targetFrame)
.build();

//非同期にアクションを実行
Future lookAtFuture = lookAt.async().run();

//実行キャンセルのリクエスト
lookAtFuture.requestCancellation();
“`

#見て見てPepper
Pepp

元記事を表示

【Android】WebViewをJetpack Composeで使った場合の、バックキーで前ページに戻る方法

WebViewでは、バックキー(戻るボタン)を押した場合に前のページに戻る(ブラウザバック)のが一般的な動作かと思います。
本記事では、WebViewをJetpack Composeで使った場合の、バックキーで前ページに戻る方法をメモとして投稿します。

# コード
“`kotlin
@Composable
fun MyWebView() {
// 1
val backPressed = remember { mutableStateOf(false) }

// 2
AndroidView(
factory = { context ->
WebView(context).apply {
webViewClient = object : WebViewClient() {}
}.also {
it.loadUrl(“https://qiita.com”)
}
},
//

元記事を表示

MediaCodecでbitmap列から動画作成

動くコードと参考文献を載せておきます。kotlin&Coroutineに書き直しました。随所お好みにカスタマイズしてください。
jcodecの100倍くらいエンコード早かったです。さすがAndroid純正フレームワーク。

2021/10/08:
エラーが出たので、scaled.recycle()をコメントアウトしました。  

2021/10/10:
読み込ませるframeのwidthとheightが、偶数値でないとエラーになるバグを修正しました。

“`使い方.kt
val frames: List = ….
val videoFile: File? = MediaCodecEncoder().encode(this, frames)// suspend function

“`

“`MediaCodecEncoder.kt

// MediaCodecフレームワークを使ったエンコード
class MediaCodecEncoder {

private val MIME_TYPE = “video/avc”
private va

元記事を表示

Couchbase Mobileアプリケーション開発へのロードマップ

# はじめに

Couchbase Mobileによるアプリケーション開発に関する記事や参考情報を、カテゴリー別に整理しています。

## 関連技術

https://qiita.com/yoshiyuki_kono/items/05496b26e1dc4eb99ddb

## 基本的な使い方(ドキュメントより)

### Couchbase Lite

https://qiita.com/yoshiyuki_kono/items/b24266297c4b53017264

https://docs.couchbase.com/couchbase-lite/current/index.html

### Sync Gateway

https://docs.couchbase.com/sync-gateway/current/introduction.html

## チュートリアル

https://docs.couchbase.com/tutorials/mobile-travel-sample/introduction.html

### 利用可能な言語

#### Androi

元記事を表示

Pepper SDK入門(32) Frameでメリーさんのように正確な現在地を把握する

#はじめに
都市伝説に登場するメリーさんは、自分の現在地を丁寧に電話してきてくれます。Pepperもそのように正しい位置を把握できれば便利ですね!そこで登場するのがFrameです。
Frameは特定の位置を表します?それでは早速、順を追ってFrameについての理解を深めていきましょう。

#FreeFrameかAttachedFrameで最先端
Frameの位置は後から更新されます。交信はしません??
FreeFrameは緯度と経度を表します。例えば本棚の位置にフレームを設定すれば、Pepperはどこに動いても本棚に戻ってきます。
AttachedFrameは対象の物体との相対位置を表します。人も設定することが可能で、その人が動けば一緒についていくピクミン的挙動を示します?画像は刷り込まれるひよこです。
niwatori_hiyoko_koushin.pngUnity x Androidビルドで「Failed to update Android SDK package list. See the Console for details.」

2ヶ月ぶりに、久々Androidビルドをしたらこんな下記エラーが。

“`
Failed to update Android SDK package list. See the Console for details.
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37406/2d909f2a-459d-5bf4-6813-1cc86fe6de5b.png)

## 試したこと

### UnityHubのAndroidモジュールが正しいかチェック

Android SDKが新しいかチェック。
UnityHubのモジュールを使っているので、下記をチェック。
問題なさそう、念の為Unity2019をつかっていたので最新版のUnity2019.4.30f1を入れ直し+Androidのモジュールも

下記画像のようにした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37406

元記事を表示

【Android】OkHttpによるHTTP通信時のコネクションの再利用

## 概要

[OkHttp](https://square.github.io/okhttp/)のOkHttpClientオブジェクトを再利用することによる通信処理の効率化について記載します。

[iOS(Swift)についてはこちら](https://qiita.com/cwan/items/a1d169152fc65520bf3b)

## 障害事象

弊社が開発しているAndroidアプリのデータ転送量が多すぎるのではないかという報告を受けました。データ転送量を測定してみると、HTTPリクエスト・レスポンスのヘッダーおよびボディサイズの合計の2.5倍程度の量が発生していました。

※このアプリの外部への通信はすべてOkHttp (ver.4) を使用して実装されています。

## 調査方法

Android StudioのProfilerを使用して、通信状況を調べてみることにしました。

1. Androidシミュレーター (AVD) でアプリを起動する
1. ツールバー > [View] > [Tool Windows] > [Profiler]
1. [SESSION] の

元記事を表示

AndroidのNavigationコンポーネントで親Fragmentを取得する方法

# 解決策
“` kotlin
val navHostFragment = parentFragment as NavHostFragment
val parent = navHostFragment.childFragmentManager.fragments[0]
if (parent is MainFragment)
// …略
“`
`Fragment#getParentFragment()`が`NavHostFragment`なのでDialogFragmentなどを実装している時、呼び出し元のFragmentにコールバックさせるのがひと手間いる。
`NavHostFragment`の子Fragmentを覗いてみたら

“`
[呼び出し元のFragment, 呼び出されたFragment, …]
“`
という風になっているので上記の内容で呼び出し元のFragmentを取得できた。

:::note warn
ただし、バックスタックがたくさんある場合はfragments[0]が呼び出し元のFragmentとは限らない。
:::

# 別の解決策
https://s

元記事を表示

Android NDK で静的ライブラリを最小構成で作成する

## ことの発端

他のプラットフォームで `C++` を使って開発した機種依存しないコード(所謂`共有コード`)を `Android` で使いたい。
小規模ならば `AndroidStudio` で自動生成された `CMakeLists.txt` にソースコードを追加して終了なのだが、`共有コード`が巨大(またはビルドに相当な時間が掛かる)だと色々と厄介。
なので、`共有コード`を独立してビルドして、後でガッチャンコしたい。

## `共有コード`のビルド

いきなり巨大な`共有コード`だと大変なので、まずは簡単な構成でやってみましょう。

### 1. ファイル・フォルダ構成

“`:ファイル・フォルダ構成
/
src/
sub.cpp
sub.h
CMakeLists.txt
build.sh
“`

### 2. `CMakeLists.txt` を作る

お好きな感じで `CMakeLists.txt` を作ります。

“`cmake:CMakeLists.txt
cmake_minimum_required(VERSION 3.10.2)

元記事を表示

Androidテスト全書 第1章 テスト入門

## はじめに
私はAndroidエンジニア一年目になります。
今まで全くと言っていいほどテストコード書かずにいました。
どう書けばいいかもわからない中「[Androidテスト全書](https://peaks.cc/books/android_testing)」を読み始めました。
アウトプットのため各章をまとめさせていただけたらと思います。

書籍については以下になります。
Androidテスト全書
https://peaks.cc/books/android_testing
### なぜテストが必要なのか

– 未然にクラッシュ防ぎ、開発プロセスに強固なテスト基盤を構築することは品質を確保する必要があるから
– Play Storeで星1のレビューのついたアプリを解析したところ、42%もの割合のアプリがクラッシュを含む安定性の問題があった
– Googleは低品質なアプリをPlay Storeのランキングや検索結果の上位には表示されないようにアルゴリズムを改良した
– テストは動く仕様書であり資産である

### Androidのテストの種類と方法

– ブ

元記事を表示

ViewModelの実装方法まとめ

前回は`Navigation`に関しての記事を書きましたが、今回は`kotlin`における`ViewModel`の実装方法、`LiveData`の使い方、`DataBinding`の適用方法についてまとめていきます。

# この記事の内容
公式の[ドキュメント](https://developer.android.com/guide/navigation?hl=ja)やトレーニング「[Android Kotlin の基礎](https://developer.android.com/courses/kotlin-android-fundamentals/overview?hl=ja)」のレッスン5「アーキテクチャ コンポーネント」を参考に実装のポイントとエッセンスをまとめていきます。
`ViewModel`とは何か、また`MVVM`デザインパターン等については触れません。

### 前提知識

* kotlinの基礎的な文法
* AndroidStudioの使い方/アプリの作り方
* 画面や画面部品の配置方法
* `Navigation`の実装方法(前回記事参照)

### 開発環境

元記事を表示

Jetpack Composeで簡単な画面遷移を行う

単純なコンポーザブル関数が用いられている2画面間の遷移(のようなもの)をする方法の一つです。
build.gradle(:app)に以下のような依存関係を追加してください。

“`gradle:build.gradle(:app)
// いろんなやつ

dependencies {
// いろんなやつ
implementation “androidx.navigation:navigation-compose:2.4.0-alpha09”
}
“`

:::note warn
注意
compileSdkVersion が 30以下だと後の処理でエラーが出る可能性があります。
:::

今、以下のような `FirstScreen` と `SecondScreen`を移動する場合を考えます。

“`kotlin
@Composable
fun FirstScreen(navController: NavController){
Column {
Text(text = “1つ目の画面”)
Button(onClick = { navCo

元記事を表示

OTHERカテゴリの最新記事