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

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

Migrate to AndroidXしたら”No tests found”と言われてハマった

Android Studioの“Refactor -> Migrate to AndroidX”を使ってて、何度かハマったパターン。

自動のmigrationが終わって、テスト走らせてみたら

“`
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don’t inherit from TestCase or lack @Test annotations).
“`

とだけ言われて、「@Test annotationちゃんとついてるしなー… `build.gradle`で`androidx.test.runner.AndroidJUnitRunner`も指定してあるし… :frowning2:」としばらくハマる。

結局

“`
androidTestImplementation ‘androidx.test:runner:1.2.0’
“`
の追加忘れ。自動では追加してくれない

元記事を表示

WSL2とAndroidエミュレータの共存

# Windows Home + WSL2 + Androidエミュレータ

この環境で色々ハマったので備忘録として書いておきます。

# WSL2とHyper-VとAndroidエミュレータ
まず、WSL2とHyper-Vの関係
https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce
ここを見てもらうのがいいのですが、WSL2はHyper-Vハイパーバイザーの上で動いています。Windows Pro にある Hyper-V とは別です。また、Windowsハイパーバーザープラットフォームを有効化することで、他の仮想化技術と共存させることができるようです。似た用語で紛らわしいのですが、「Hyper-Vハイパーバイザー」、「Hyper-V」、「Windowsハイパーバーザープラットフォーム」はそれぞれ別物のようです。

で、WSL2をインストールした状態でAndroidエミュレータを起動しようとするとHyper-Vが有効化されているので起動できないので、Hyper-VをOffにするコマンドを実行してね、というメッセージが表示されます。

元記事を表示

/proc/uid_io/statsの情報の出所

# 前提
AOSP タグ:android-10.0.0_r41
kernel/common タグ: [ASB-2020-08-05_4.19-q-release](https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2020-08-05_4.19-q-release)

# はじめに
Android 8以降、I/Oの統計情報をUID毎に出力するstoragedと呼ばれるデーモンが実装されている。
このデーモンはAndroid公式で説明されているように、Android独自procfsである”/proc/uid_io/stats”から取得できる情報がソースとなっている。
本procfsはどのようにしてI/O統計を実現しているかを、備忘録をかねてソースベースで見ていく。

# TL;DR
・task_struct構造体に保持されているI/O統計(/proc/[pid]/io)をUIDと紐づけるためのI/F。
・UID, taskそれぞれのI/O統計情報をhashtableを利用して管理。
・統計情報の更新タイミングは、

元記事を表示

kotlinとjavaで前の画面に戻りたい!

# はじめに…

この記事は[5個前の記事](https://qiita.com/sato-na/items/cc23f9b1db9c948dc00e)で書いた、

**7日間毎日記事投稿の6日目**

になってます

使うコードは下に貼りますが、このアプリの詳しい機能はその5個前の記事をご覧ください!

– java版 : https://github.com/sato-na/guruwake_java

– kotlin版 : https://github.com/sato-na/guruwake_kotlin

↓ここからが今回の記事の本題です↓

# それぞれの言語で前の画面に戻るには…

※これはツールバーの戻るボタンから一つ前の画面に戻るための方法です

## ツールバーの実装方法

– javaの場合

“`java
Toolbar 変数名 = findViewById(R.id.ツールバーのid);
setSupportActionBar(変数);
“`

例)

“`java:WhoActiity.java
Toolbar whoTb = findViewByI

元記事を表示

Github Actions と Firebase App Distribution と Slack で apk を自動でテスターに配布

GitHub Actions を使って Android の CI 環境を整えてみようと思います。
今回は PR が master にマージされたら、ビルドして Firebase App Distribution に apk をデプロイ (+ Slack でデプロイ完了を通知) するまでを目指します。

## Firebase の準備

まずは Firebase のアカウントを準備しましょう。

[ログイン – Google アカウント](https://console.firebase.google.com)

### Firebase のプロジェクトを作成

Firebase にプロジェクトを作成し、Android アプリを追加します。

![add_android_app](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308397/07d1175a-53dc-16c2-93fe-446d79570b75.png)

追加できたら、サイドメニューから 品質 -> App Distibution を選び

元記事を表示

SQLiteOpenHelperを用いたDBのRoom移行〜NonPrimaryKeyの場合を添えて〜

#はじめに
息が長いプロダクトの場合、SQLiteOpenHelperを用いたSQLiteDatabaseがアプリ内にあることがあります。
現在はRoomが主流で、[公式ページ](https://developer.android.com/training/data-storage/room?hl=ja)でも以下のように記載があります。
>SQLite の代わりに Room を使用することを**強くおすすめします**。

メンテナンス性、安定性、モチベーションなど、どれを取ってもRoomの方が良いのですが、既存のSQLiteDatabaseをRoomに置き換えたい場合どうすればよいか?ということで試行錯誤したのでメモします。
Roomのバージョンは`2.2.5`です。

`注意`
※もしかしたら、特定の条件で移行がうまく行かないこともあるかもしれません。
※DBは様々な状態があり、クラッシュの幅も広いので、試す場合は自己責任でお願いいたします。

#移行手順
基本的には、同条件のRoom定義を作成すれば、そのままRoomで既存DBを扱うことが可能です。
しかし、既存テーブルにprima

元記事を表示

macOS Big SurでAndroid Studioの Emulatorが起動した瞬間にクラッシュする問題の回避策

#はじめに
macOS Big Surを使用していると、Parallelsが使えなくなったり、Visual Studio 2019が落ちることが多発する様ですが、Android Studioもその中の1つです。
タイトルの通り、Android StudioからEmulator(バージョンに関わらず)を起動すると、Android Studioもろともクラッシュしてしまいます。

スタックオーバーフローでも同様の問題が確認できます。
https://stackoverflow.com/questions/63148352/emulator-does-not-start-c066d201-unhandled-exit-1d

私の環境では上の解決法では治りませんでしたが、ごちゃごちゃやっているうちに解決法を見つけたので紹介しようと思います。

#環境
macOS Big Sur Beta 11.0 Beta(20A5343i)

Android Studio 4.0.1
Build #AI-193.6911.18.40.6626763, built on June 25, 2020
Runt

元記事を表示

kotlinとjavaで画面遷移したい!

# はじめに…

この記事は[4個前の記事](https://qiita.com/sato-na/items/cc23f9b1db9c948dc00e)で書いた、

**7日間毎日記事投稿の5日目**

になってます

使うコードは下に貼りますが、このアプリの詳しい機能はその4個前の記事をご覧ください!

– java版 : https://github.com/sato-na/guruwake_java

– kotlin版 : https://github.com/sato-na/guruwake_kotlin

↓ここからが今回の記事の本題です↓

# それぞれの言語で画面遷移をするには…

## 画面遷移の基礎

– javaの場合

“`java
Intent intent = new intent(遷移前のアクティビティ.this, 遷移後のアクティビティ.class);
startActivity(intent);
“`

例)

“`java:MainActivity.java
Intent intent = new Intent(MainActivity.thi

元記事を表示

Android,KotlinでRealm

– Android Studio 4.0.1
– Kotlin: 1.3.72
– realm:6.0.2
– Windows 10

## インストール

“`gradle:bundle.gradle(project)

buildscript {
dependencies {
classpath “io.realm:realm-gradle-plugin:6.0.2”
}
}
“`
“`gradle:bundle.gradle(app)
apply plugin: ‘kotlin-kapt’
apply plugin: ‘realm-android’
“`

## 初期化

Applicationクラスを作成し、その中でrealmの初期化をする

“`kotlin:App.kt
package jp.co.sankosc.sample

import android.app.Application
import io.realm.Realm

class App : Application() {
override fun onCr

元記事を表示

【Unity Hub】「モジュールを加える」が表示されない

UnityAndroidでJDKが見つからないくて、HUBから「モジュールを加える」で解決できるとあるが、それが表示されない。
Unity20194.5.1LTS,Unity20194.8LTSで発生

これで⇓解決できそうなのでメモ

【Unity Hub】「モジュールを加える」が表示されない方へ
https://koshishirai.com/unity-add-module/


★ windows10proで確認

Hubから削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/ec966b5e-a3a7-1155-a5c5-b6646547c3ea.png)

次に https://unity3d.com/jp/get-unity/download/archive から使いたいVERのUnityHUB(緑ボタン)を選択する。
そしたら次の画面でる。
![image.png](https://qiita-image-store.s3.ap-nort

元記事を表示

cocos2d-x v4でのプロジェクト作成方法(mac)

#環境
macOS Catalina
cocos2d-x 4.0

#ダウンロード
cocos2d-xをダウンロードする。
https://www.cocos.com/en/cocos2dx/download
ダウンロードしたzipファイルを展開する。

#セットアップ
cocos2d-x-4-1.0というような名前のフォルダができるので、それを任意の場所に移動する。
ターミナルを開き、cdコマンドでフォルダに移動する。
setup.pyを実行する。

“`
$ cd cocos2d-x-4-1.0
$ ./setup.py
“`

setup.pyを実行するとNDK_ROOT等の入力を求められるがとりあえず無視する。
最後に下記のようなメッセージが表示される。

“`
Please execute command: “source /Users/username/.zshrc” to make added system variables take effect
“`

書いてあるコマンドをコピペして実行する。パスは環境によって異なる。

“`
source /Users/

元記事を表示

Androidの実機のみで起こる事象をLogcatで追う

#はじめに
以下の状況になった。
1. エミュレータでは起きずにAndroid実機でのみ起きるバグが発生した。
2. Android StudioのLogcatウインドウでは実機のログが取れなかった。

#Android Studioで実機のログ取得
ログ取得は環境設定をうまくすれば可能となるようだ。しかし面倒だったので、ここでは単純な方法を試した。

1. Android実機をPCに接続する。
2. PC上のAndroid Studioを用いて、対象アプリを実機上で起動する。
3. Android StudioのTerminalウインドウを開き、コマンド「adb Logcat」を入れる。

これで、実機のログがTerminalウインドウ上に表示できる。ただし全てのログを表示するので、制限を加える必要がある。

* タグTagXのみ表示は、「adb Logcat -s TagX:*」とする。
* 任意文字列「search_string」のフィルタは、「adb Logcat | find “search_string”」とする(UNIX系ではgrepでも可)。

#見つかっ

元記事を表示

[Android] logcat の使い方を見直す

# はじめに
この記事では、Android Studio の logcat の使い方を見直して、より快適に開発を進める Tips をいくつか紹介します。
紹介する Tips は、公式ドキュメントや記事を参考しています。

**実行環境**

– Android Studio 4.0.1
– OS: Mac

# 1. Logcat Header を設定する
logcat の左下の[歯車マーク]をクリックすると、[Configure Logcat Header]の画面が表示されます。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215440/1783d3b8-3616-f99a-2580-228291fbd437.png)

[Configure Logcat Header]の画面では、ログの先頭に表示するものを設定できます。
私の環境では、以下の画像のように設定されていました。
チェックを付けたり外したりすると、インタラクティブにログのサンプルが変わります。

![スクリーンショット 202

元記事を表示

Android GitHub Actions Hands-on

## 内容
GitHub Actionsを使って、AndroidのCI環境を構築する。最低限のビルド&デプロイができるところまで。

1. masterの更新時とmasterへのPRを作成したブランチに対して、apkをビルド
2. ビルドしたapkを保存できるようにする
3. masterブランチを更新したとき、アプリをFirebase App Distributionで配布する

## 0. 準備
Android Studioで新規にプロジェクトを作成する。
そのプロジェクトをGitHubのリポジトリにpushする。

完成したサンプルはこちら。
https://github.com/KamikazeZirou/android-github-actions-sample

## 1. とりあえずビルドする
(1) GitHubのリポジトリのページを開く
(2) GitHub Actionsを押す
(3) AndroidでSetupする(下図)
本当にAndroidのFragmentには空のコンストラクタが必要なの?

フラグメントに空のコンストラクタがなぜ必要なのかを、とっさに説明できなかったので、簡単にまとめてみた。

## 空のコンストラクタを作成しないとどうなるか
あなたが複数の引数をとるコンストラクタを持つFragmentを作ったとする。
そのFragmentは正常に動くだろう。
その後あなたはアプリをリリースする。

その後以下のエラーメッセージ付きのクラッシュ報告がたくさん上がってくる。
開発時はエラーなんて吐かなかったのに、古いAndroidを使い続けるユーザーが悪いんだとあなたはは思いつつエラー対応に当たることになる。

“`
Unable to instantiate fragment
make sure class name exists, is public, and has an empty constructor that is public
“`

fuck you android(これは本当にそう)

## 正しい空のコンストラクタの作り方
とにかくFragment内部のコンストラクタをoverrideするのは止める。
常に空のコンストラクタを記述し、Frag

元記事を表示

【Flutter】画面サイズに応じて文字サイズを自動で適用する方法

#この記事を読んで習得できること
画面サイズに応じて文字サイズを自動で変えることができるようになる。
結構使うことになるので備忘録として。

#結論
`Text`を`FittedBox`配下に置く。

“`sample.dart
FittedBox(
fit: BoxFit.fitWidth,
child: Text(
“あああああああああああああああああああああああテトラポット”,
style: TextStyle(fontSize: 32),
),
),
“`

![スクリーンショット 2020-08-18 23.42.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389553/51168828-0ce2-6c2d-63e2-9c3da2b14e74.png)

#FittedBoxがなかったら
折り返したり、画面からはみ出たりして、画面がぶっ壊れてしまう。

“`sample.dart
Text(
“あああああああああああああああああああああああテトラ

元記事を表示

kotlinとjavaで関数を作りたい!

# はじめに…

この記事は[3個前の記事](https://qiita.com/sato-na/items/cc23f9b1db9c948dc00e)で書いた、

**7日間毎日記事投稿の4日目**

になってます

使うコードは下に貼りますが、このアプリの詳しい機能はその3個前の記事をご覧ください!

– java版 : https://github.com/sato-na/guruwake_java

– kotlin版 : https://github.com/sato-na/guruwake_kotlin

↓ここからが今回の記事の本題です↓

# それぞれの言語で関数を作るには…

– javaの場合

“`java
修飾子 戻り値の型 関数名(引数, 引数, …) {
関数の内容
return 戻り値
}
“`

例)
※ 引数なし、戻り値なしの関数を定義している

“`java:WhoActivity.java
private void addMember() { // 78行目
EditText memberET = findViewB

元記事を表示

AndroidでKotlin Coroutinesを導入する際の注意点

# 導入方法

AndroidでCoroutinesを導入する際は、`app/build.gradle`に以下のように記載します。
バージョンは特に理由がなければ最新版を指定するのが望ましいでしょう。

“`gradle:build.gradle
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7’
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7’
“`

# 注意点

以下に導入する際に起きたトラブルおよび原因、解決方法を記載します。

## VerifyErrorによるアプリクラッシュ

Kotlin 1.3系(私の環境では1.3.41)を使用している場合に、Coroutinesのバージョンを1.3.7にすると、コルーチンの処理を呼び出したときにVerifyErrorが発生してアプリがクラッシュしました。

“`
java.lang.VerifyError: Verifier rejected cla

元記事を表示

MarketingCloudSDK In-App Messaging概要

# In-App Messagingとは
ユーザがアプリのプッシュ通知を許可していなくてもユーザにメッセージを配信できるアプリ内メッセージのことです。
アプリがフォアグラウンドの状態になる度にアプリ内メッセージが読み込まれ、SMCで作成したメッセージが、アプリのビュースタックの最上部に表示されます。(閉じたメッセージは再度表示されません)

メッセージのテンプレートは以下3つがあります

・***フルページ***
 レイアウトが画面全体に表示される
・***バナー***
 画面最下部または最上部に表示される
・***モーダル***
 画面の一部に全面表示される

上記3つともSMCのContent Builderで設定可能です。
また色や、画像の配置、フォントサイズなどカスタマイズ可能になっています。
※文字のフォントに関してはデバイスのシステムフォントを使用しているため、アプリ側のフォント上書きの実装が必要です。

通知するには***JourneyBuilder***からアプリ内メッセージの送信が必要です。

#実装
以下、公式ドキュメントから参照となります。

1.アプリ内メッセ

元記事を表示

AndroidでのUnitTestざっくり入門

– Android Studio 4.0.1
– Kotlin: 1.3.72
– robolectric:4.3
– Windows 10

Androidアプリ開発でUnitTestをします。
出来る限り実機やエミュレータを使わず、JavaVM上で動かしサクサクテストできるような環境を目指します。

## テストケースの種類

### InstrumentedTest
– app/src/androidTest
– 実機もしくはエミュレータ上で実行される
– ExampleInstrumentedTest.ktというサンプルが作られる
– 今回は、こちらはできるだけ使用しない方針です。

### UnitTest
– app/src/test
– PCのJavaVM上で実行される
– ExampleUnitTest.ktというサンプルが作られる
– 今回はこちらをメインで使用していきます。

## テストケース実行

– Android Studio にて該当のパッケージ、クラス、メソッドで右クリック→ Run Testsで実行できる

## テストケース作成

– 該当の

元記事を表示

OTHERカテゴリの最新記事