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

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

モバイルアプリの自動テストツールShiratesを使ってみよう

本記事は自動テストツールShirates(シラテス)の紹介記事です。※はてなブログからの転載です。

# モバイルアプリのテストの自動化

昨今、ソフトウェアテストの自動化がますます重要になっています。モバイルアプリも例外ではありません。自動化を実現するツールには有償・無償のものが多数存在します。無償のもので注目されている製品としてはAppiumがあります。筆者もAppiumを導入して使用しましたが、とてもハードルが高いという感想です。はっきり言って、茨の道です。ちゃんと使ってテストの実務で成果を出せるようになるにはある程度の期間修行が必要です。開発スキルを持ったエンジニアでも苦労するのですから、もっと導入や使用方法が簡単でないとテストエンジニアに広く普及させるのは難しいと考えています。

# Shiratesとは

Shiratesはそのような敷居の高さを少し下げてくれるOSSのツールです。GitHubから入手できます。

https://github.com/ldi-github/shirates-core/blob/main/doc/markdown/index.md

元記事を表示

Cordovaアプリ開発の備忘録(プラグイン編)

前回の投稿では、Cordovaアプリの基本的な開発手順についてまとめました。
今回は、プラグインの開発手順についてまとめようと思います。

Plugin Development Guide

https://cordova.apache.org/docs/en/11.x/guide/hybrid/plugins/index.html

# プラグイン名を決める

まずは、プラグイン名を決めましょう。
今回は適当に「sampleplugin」とでもしておきましょうか。

フォルダ名は、慣例があり、「cordova-plugin-sampleplugin」となります。

“`
> mkdir cordova-plugin-sampleplugin
> cd cordova-plugin-sampleplugin
“`

# plugin.xmlを作成

“`xml:cordova-plugin-sampleplugin/plugin.xml
DroidKaigi 2022のセッションで驚いたところ

基本的にはただのメモです。
特に驚いたところを太字にしておきます。
コードレビューしていたりなどで、あんまり聞けていない部分もあるのでお許しください :bow:

## Jetpack Compose で Material Design 3

https://speakerdeck.com/yanzm/material3-with-jetpack-compose

Design Token = デザインの値に名前をつけたもの。

自分の頭の中のイメージをコードにするとこんな感じです。

“`kotlin
interface DesignToken

class SystemToken(
// ここのContextはDarkThemeかどうかなどという意味のContext
val refs: Map
): DesignToken

class ReferenceToken(val color: Int): DesignToken
“`

**その文字列の例は`md.sys.color.on-secondary`。これを分解する

元記事を表示

Android12 ビルドエラー

Android Studioでのビルドエラー:

android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

原因
・Android12になった場合、AndroidManifest.xmlに追記しているAcitivityなどに、明確に「android:exported=”true|false”」を設定しないといけません。

・利用中のライブラリにも、「android:exported=”true|fal

元記事を表示

Cordovaアプリ開発の備忘録

スマホアプリのアプリ開発にCordovaを使っています。サーバサイドはNode.js、ブラウザアプリはJavascriptを使っているので、スマホのネイティブアプリの開発もJavascriptで開発できるのは新言語を覚える必要がなく、Javascriptに専念できるので魅力的です。
さらに、iOSやAndroidの両方のネイティブアプリを1つのコードで動作できるのはありがたいです。

Cordova

https://cordova.apache.org/

今回は、Cordovaアプリを開発・デバッグするための方法や、OS独自の機能を実装できるプラグインの開発方法についてまとめておきます。いろんな開発をやっていると、Cordovaの開発方法を結構忘れがちになるので、備忘録として残しています。

# Cordovaのインストール

Node.jsがインストールされている前提です。
以下を実行すれば完了です。

“`
> npm install cordova -g
“`

また、開発する対象のスマホOSごとにコンパイル環境のインストールが必要です。

[Androidの場合]
An

元記事を表示

【Android】個人的新たに見つけたアノテーションのメモ

# はじめに
これまでに
[【Android】個人的によく使うアノテーションについてのメモ](https://qiita.com/Tsubasa12/items/e02458af070748d20cb4)
[【Android】個人的によく使うアノテーションについてのメモ part2](https://qiita.com/Tsubasa12/items/46ef6c82b6fab28b9035)
という記事を書いてきましたが、今回は新たに見つけたアノテーション達の意味を調べたので後に見返せるように記事に残します

# アノテーション表

※”@”をつけるとアドレス認識になってしまうので省略

|アノテーション|意味|
|:—|:—|
|ContributesAndroidInjector|ActivityでInjectができるようにする|
|DrawableRes|受け取る値をdrawableのIDとして定義したものに限定する|
|NeedsPermission|パーミッションが必要な処理を実行する関数に付ける|
|RuntimePermissions|パーミッションを処理するA

元記事を表示

【Android&Espresso】Navigationで引数付きの画面遷移をした時のUIテストについて

# はじめに

皆さん、ごきげんよう!れぶです!

今回の記事では`Navigation`で引数付きの画面遷移を行った場合、遷移先であるフラグメントのViewをテストする方法について整理しました。

**遷移元から送られた値を遷移先で表示する処理について、UIテスト(`Espresso`)を行いたい**方に特に参考になればと思います。それでは、参りましょう!!

# 開発環境

* MacBook Air
* Android Studio Chipmunk | 2021.2.1
* Kotlin 1.6.10
* compileSdkVersion 33
* targetSdkVersion 33
* minSdkVersion 21
* Espresso 3.4.0

# 前提
## 処理内容
⑴ FirstFragmentのボタン(button1)をタップ
⑵ SecondFragmentに遷移
⑶ 数字の10を送る
⑷ SecondFragmentのテキストビュー(textview1)に⑶を表示

※ 今回はあくまで内容を簡単にするために、複雑な処理なしでデータを受け渡します。

元記事を表示

Kotlin 1.7.20の変更点

※ソース記事は[こちら](https://kotlinlang.org/docs/whatsnew1720.html)
※Kotlin/JS、Kotlin/Nativeについては割愛します。
“`
Kotlin 1.7.20用のIDEサポートがIntelliJ IDEA 2021.3,2022.1,2022.2で利用可能
“`
[リリース日:2022/9/29](https://kotlinlang.org/docs/eap.html#build-details)
Kotlin 1.7.20がリリースされている。こちらに、このリリースからいくつかのハイライトがある。
– 新しいKotlin K2 コンパイラが`all-open`、SAM with receiver、Lombok等のコンパイラプラグインをサポート
– 上限のない範囲をつくるための`..<`演算子のプレビューの導入 - 新しいKotlin/Nativeのメモリマネージャーが現在デフォルトで有効 - JVM用の新しい実験的機能の導入:ジェネリックの基底型を持つインラインクラス このビデオで、変更の短い概要を見つけることが

元記事を表示

ReadyMedia (MiniDLNA) 構築・Android 連携メモ

# これは作業録です
– TrueNAS の Plex 使おうかと思ったけど Playlist (.m3u) の扱いが微妙そうだったので見送り

# ReadyMedia (MiniDLNA)
– HW
– NUC7CJYH
– その内 OrangePi とかに移すかもしれない
– SW
“`zsh
% uname -a
Linux ubuntu 5.4.0-126-generic #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

% cat /etc/os-release
NAME=”Ubuntu”
VERSION=”20.04.4 LTS (Focal Fossa)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubuntu 20.04.4 LTS”
VERSION_ID=”20.04″
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/

元記事を表示

【Android】ローカルDBに日時を保存する方法と注意点

## SQLite と日時型

Android 標準のローカルデータベースは SQLite です。
[Room ライブラリ](https://developer.android.com/training/data-storage/room?hl=ja)を使った場合も内部では SQLite が使用されます。

SQLite には日時型がありません。
 →[Datatypes In SQLite](https://www.sqlite.org/datatype3.html)
日時を保存するには、SQLite で使えるいずれかの型に変換してやる必要があります。

SQLite の `datetime` 関数は `YYYY-MM-DD HH:MM:SS` 形式の TEXT 型の値を返します。
 →[Date And Time Functions](https://www.sqlite.org/lang_datefunc.html)
SQL で `datetime` 関数との比較などを行えるようにするため、
ローカル DB に保存するのはこれと同じ形式にするのがよいでしょう。

### Roo

元記事を表示

【Android】PopupMenuの表示方法

# はじめに 
最近シンプルなPopupMenuを実装したのですが、ドキュメントが少ないように感じましたので簡単にまとめておこうと思います。

# 表示方法
まず、以下のようなmenu.xmlを作成します。

“`test.xml

元記事を表示

【Android】斜めの線をCanvasで引く方法

今回は斜めの線をCanvasで引く方法を記載しようと思います。

このやり方は簡単で、縦横の比率が変わっても角から角へ線を引くことができます。

“`LineView.kt
class LineView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : View(context, attrs, defStyleAttr) {
var paint: Paint = Paint()
override fun onDraw(canvas: Canvas) {
// 線の太さ
paint.strokeWidth = 4f
// 線の色
paint.color = ContextCompat.getColor(context, R.color.black)
// 線を表示する位置
canvas.drawLin

元記事を表示

android appでOkHttpを使ってapiをたたくためにやったこと

# 前置き
既存の自作webアプリ向けのbackendを
新規開発するandroidアプリからも利用したかった。
やり方を調べるのに時間がかかっためここにまとめる。

# 前提条件
開発環境は以下である。
| OS | macOS Monterey12.6 |
|:-:|:-:|
| IDE | IntelliJ IDEA 2022.2.2 |
| 言語 | kotlin |
| ビルドツール | gradle |

# 追記箇所
実際に動作が確認できるまでに追記した箇所を示す。

## build.gradle.kt
依存関係の追記。
pathは公式HPから参照した。
https://square.github.io/okhttp/#releases
“`gradle
implementation(“com.squareup.okhttp3:okhttp:4.10.0”)
“`

## AndroidManifest.xml
インターネットへのアクセスを許可する設定を追記する必要がある。
“`xml
androidメモ

## 審査がある。
15年ごろの3分が 22年では2日に伸びている。

## packageName一覧を列挙する
Intent i = getIntent();
pm.getLaunchIntentForPackage(“package.name.xxxxx”);
@SuppressLint(“QueryPermissionsNeeded”) List resolve = pm.queryIntentActivities(i, PackageManager.MATCH_ALL);
for (ResolveInfo s : resolve) {
Log.d(“IconResourceID”, String.valueOf(s.getIconResource()));
}

## アプリが入っていない場合にストアへ飛ばす
try {
startActivity(intent);
} catch (Exception ignored) {
// todo: 事

元記事を表示

Android12でデバグできなくなった


最近(2022/10/08)、手元のスマホをAndroid12に機種変したのですが、AndroidStudioからの実機デバグにて、インストールに失敗するという事例が出ました。

よくある「INSTALL_PARSE_FAILED_MANIFEST_MALFORMED」というエラー。

AndroidStudio の SDKManagerで、Androidの該当バージョンがインストールされていないとかそういう話ではなく、

マニフェストファイルの「Activity」タグに属性に「android:exported=”true”」を入れれば、インストール/デバグできるようになりました。


以上

元記事を表示

リストのドラッグ&ドロップ終了時に通信をしたい

# 初めに
今回は、`epoxy`を使った`RecyclerView`でドラッグ&ドロップを実装する時に少しわかりづらかった部分を紹介していこうと思います
### 本文
やりたいこととしては、`RecyclerView`でドラッグ&ドロップが終わったタイミングで内部のデータの整理と通信処理を行いたいです。
この時に自分が詰まったのは意図せず通信が何度も走ってしまうという点でした。
原因としては`onModelMoved`は1個要素がずれるたびに呼び出されるので通信処理が何回も呼び出されてしまっていたのです。
そこで、調べてみると要素の入れ替えが終わり、指が離されたときに呼び出される`cliearView`というのがありました。
なので、そのタイミングで内部データと通信処理を行うようにしました。
多少省略はしてますが、コードは下記の通りになります。
“`kotlin
EpoxyTouchHelper.initDragging(controller)
.withRecyclerView(binding.recycler)
.forGrid(

元記事を表示

Text Editの内側に影をつける方法〜Layer-List〜

Androidアプリの実装中にTextEditの領域の **内側** に影をつけたかった!
うまい実装方法に辿り着いたので備忘録としてここに残します。

#### elevationを試してみるが、うまくいかず・・・

入力欄の外側に影をつけるなら、XMLの中に **android:elevation=”〇〇dp”** を記述することで描画できる。

#### 次にgradient(グラデーション要素)を試したがこちらもうまくいかなかった

style要素としてgradientを使用して実装しようと思ったが、うまくいかず。(style…高さや幅、背景の色、文字についてなど外観についてまとめて記述できる要素。Viewファイルとは別に用意)
backgroundcolorで指定した白背景の上に、gradientでグラデーションをかける、という複数の要素を重ねて表示することができず断念。

## layer-list で解決した!

###### layer-list とは
画像などを、レイヤー構成で重ねることができるリソース。
**複数の画像をひとつのリソースとして取り扱うことができる。

元記事を表示

Jetpack Composeで角を丸くする

## はじめに

Jetpack Composeで丸い角のViewを作成する際にハマりました。何度もハマっている気がするので個人的なメモとして書きます。

### 正解
順番が大切です。clipを先に書くこと。
backgroundを先に書いてしまうと角が丸くなりません。

“`kotlin:view.kt
Box(modifier = Modifier
.clip(RoundedCornerShape(20))
.background(color = Color.Red)
) {
Text(
modifier=Modifier.padding(10.dp),
color = Color.White,
text = “テスト”
)

元記事を表示

【Android Wear】WatchFaceの構成アクティビティの作成

# はじめに
WatchFaceの構成アクティビティの作成方法について記述。
下の画像のペンのボタン押下時に起動する画面。
![ConfigActivity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f15a6204-980b-f3ab-02c9-7c215adf0d2f.png)

WatchFaceの作成手順については、下記を参照。

https://qiita.com/nakashimaakio/items/639f161058107eaeec74

これを実装してから構成アクティビティを作成することをおすすめする。

# 実装手順

## 下準備

### ライブラリの導入

構成アクティビティに必要なライブラリの導入
“`build.gradle
dependencies {
implementation ‘androidx.wear.watchface:watchface:1.1.1’
implementation ‘androidx.wear.watchface:w

元記事を表示

【Android】プログラム上でadb shellコマンドを実行する方法

# プログラム上でadb shellコマンドを実行する方法

## パッケージ名を指定して、別プロセスのアプリを終了させる場合

:::note info
exec()の引数を変更することで様々なコマンドを実行できます
:::

:::note warn
「adb」は省略してexec()に渡します
:::

“`main.kt
class AdbService() {

fun killProcess(packageName: String) {

//adbから実行する場合は、「adb shell am force-stop com.google.android.apps.maps」となる
val process = Runtime.getRuntime().exec(“am force-stop $packageName”)
process.waitFor()

}

init {

//GoogleMapを終了させる場合
val googleMapPackageName =

元記事を表示

OTHERカテゴリの最新記事