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

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

MemuエミュレーターにXposedを入れてみた

#XposedをMemuエミュレーターに入れるには

MemuエミュレーターにXposedを入れてみた。

基本的にしたのURLに方法は書いていますが

How to Install Xposed on MEmu Lollipop Beta

この#6 Go into terminal emulatorがどこにあるのかわからなかったのでメモします

###注意:
MemuエミュレーターはデフォルトでAndroidバージョン7です(2020/8/9現在)

なので上記サイトではxposed-v85-sdk22-x86を入れていますが
xposed-v89-sdk25-x86を入れてください

環境はWindows10です

“`cmd
where Memu
>>> C:\Program Files (x86)\Microvirt\MEmu\MEmu.exe
cd C:\Program Files (x86)\Microvirt\MEmu
memuc.exe -i 0 execcmd cd /storage/emulated/0/Download/xposed-v85-sdk22-x86

元記事を表示

KotlinのJUnitTestにおけるアサーションライブラリはKluentがとても良い感じ

## JUnitのアサーションを快適に書きたい

KotlinでUnitTestを書いていて、今までさして調べずメジャーだからと言う理由で[Hamcrest](http://hamcrest.org/)を使ってたんですが、もともとJavaのライブラリなのでKotlinだと微妙に使いにくい部分がありました。

例えば型判定のアサーションを記述したいときは↓のように書きますが

“`kotlin
val value = 10
assertThat(value, `is`(instanceOf(Int::class.java)))
“`

Kotlinでは`is`が予約語に指定されているため“` ` “`で括る必要もあるのと、`is`と`instanceOf`がネストしているのも微妙に書きにくい&読みにくく、クラス指定も`::class.java`まで記述する必要があって、当たり前ですが`KClass`で記述できないのでJavaの世界観に引きづられている印象を受けます。

また細かいところだと、`is`メソッド一つとっても[Hamcrest](http://hamcrest.org/

元記事を表示

実践・新規モバイルアプリ開発の手順(iOS)

久しぶりに新規アプリ開発をしていて、改めて手順を確認しました。

## 前提

実際の開発では多くの場合、要件定義、設計、API開発、デザインがある程度並行で走るため、仕様がフワフワした状態で着手することが多いです。
その際にどのように立ち回るのがよいか。また、複数人で開発する場合にどのように作業分担するか書いてきます。
なお、設計方針はオーソドックスなMVCで、アプリの構成は一般的なAPI通信をするサービス系アプリと想定します。
設計方針やアプリの構成が異なる場合は読み替えてください。

このフローは何案件かで新規開発を行った人であれば頭の中で構築しているのでしょうけど、言語化されてるのはあまり見かけません。

## 利用方法

– どういうタスクが存在するか確認
– 今の状態でできることは何かを見つける
– 今やってるタスクの意味を理解する
– 今やってるタスクが他のタスクとどう繋がっているか確認する
– 残タスクに対して何の資料や仕様か、何がブロック要因なのか確認する
– 進捗の目処を立てる

## iOSアプリの新規開発フロー

既に仕様が全て揃っている状態からスタートする場合

元記事を表示

【Android/Kotlin】RecyclerViewでオーバースクロールした際のエフェクトを消す

RecyclerViewやListView、ScrollViewなどで端までスクロールするとエフェクトが出る。これを消すには`overScrollMode`プロパティに`View.OVER_SCROLL_NEVER`を指定する。

指定できる値

* `OVER_SCROLL_ALWAYS` (デフォルト)
* `OVER_SCROLL_IF_CONTENT_SCROLLS`
* `OVER_SCROLL_NEVER`

“`kotlin
val recyclerView = findViewById(R.id.recyclerView)
recyclerView.overScrollMode = View.OVER_SCROLL_NEVER
“`

元記事を表示

Koinを使っているマルチモジュールプロジェクトをHiltに移行してみた

# はじめに

[会社のアプリ](https://play.google.com/store/apps/details?id=jp.r_n_i.code.point.app)も[個人的なアプリ](https://github.com/tfandkusu/quickecho)もマルチモジュールプロジェクトでDIフレームワークには[Koin](https://insert-koin.io/)を使っています。Googleさんお勧めの[Dagger](https://github.com/google/dagger)は難解でメンバーへの展開が難しかっため、直感的に理解しやすいKoinの方を採用していました。

しかし、[Android Studio 4.1(執筆時点ではBeta)ではDaggerに対応したソースコードのナビゲーション機能が追加された](https://medium.com/androiddevelopers/dagger-navigation-support-in-android-studio-49aa5d149ec9)らしく、Koinではこのようなことはできないので、Koin

元記事を表示

【Flutter】Pigeon を使ってネイティブコードを型安全に呼ぶ

## はじめに
先日の、 [ Flutter 1.20 のリリース記事 ](https://medium.com/flutter/announcing-flutter-1-20-2aaf68c89c75)で、[ Pigeon ](https://pub.dev/packages/pigeon) というパッケージの紹介がありました。
本来 Flutter 側からネイティブコードを呼ぶには、関数名や引数などを文字列ベースで合わせる必要があるなど、少し大変ですが、このパッケージを使うことで、

* ネイティブ側と__型安全に通信__
* 自動生成よる__手書きコード量の削減__

が可能になります。

本投稿では、このパッケージを使って、__swift / Kotlin で実装した単純な add メソッド__を Flutter 側 から呼ぶ方法を見ていきます。サンプルプロジェクトは[こちら](https://github.com/nskhei/flutter_pigeon_practice)で公開しています。

## Pigeon が行うこと
Dart 側で定義した、引数や戻り値の情報を

元記事を表示

【Android/Kotlin】SharedPreferencesでデータを永続化する

## やりたいこと
ユーザーの入力(EditText)を永続化し、アプリ起動のたびに初期化されないようにしたい。
## 開発環境
* macOS 10.15.5
* Android Studio 4.0
* Kotlin 1.3.72

## SharedPreferencesとは?
SharedPreferences とは、boolean, float, int, long, string などのデータ型について、キーと値のペアを読み書きできるAPI。キーと値のペアは内部ストレージにxmlファイルとして保存される。初回アクセス以降はメモリ上に展開されたキャッシュからデータを取得するため、高速にアクセスできる。

API名「SharedPreferences」から誤解されることもあるが、厳密には「ユーザー設定」を保存するためのものではなく、ユーザーのハイスコアなどの単純なデータを保存する際に使われる。↓ デベロッパーガイドより
> 注: [SharedPreferences](https://developer.android.com/reference/android/content

元記事を表示

Android 端末内にデータを保存する際の指針

# 概要
Android 端末内にデータを保存する際の指針をまとめました。

# 包括的情報
[Data and file storage overview](https://developer.android.com/training/data-storage) 参照のこと。

# ストレージ選択の指針
![Android Storage Selection Chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219474/ff1a87ea-c816-bcb8-857a-9670d3c56f09.png)

**アプリ内のみで利用されアンインストール時に削除される**かどうか?

– 他のアプリとデータを共有する場合は **no**, それ以外は **yes**。[^3]

**内部ストレージが好ましい**かどうか?

– 存在の保証[^2]が必要なデータは内部ストレージにすることが必須。
– アプリの基本的な機能[^1]から必要とされるデータは内部ストレージが好ましい。
– 大量のデータを保

元記事を表示

kotlinでJSONObjectを簡単作成

kotlinで、変数から `JSONObject` を作成したかったのですが、 まずはオブジェクト作って〜とかputして〜とか面倒だったのでパーサーを作りました。
自分用ですが、忘れないように残しておきます。

# パーサー作成

“`kotlin:JsonObjectBuilder.kt
internal fun json(build: JsonObjectBuilder.() -> Unit): JSONObject {
return JsonObjectBuilder().json(build)
}

internal class JsonObjectBuilder {
private val deque: Deque = ArrayDeque()

fun json(build: JsonObjectBuilder.() -> Unit): JSONObject {
deque.push(JSONObject())
this.build()
return deque.pop()

元記事を表示

HttpURLConnectionでPATCHリクエストを投げる

Androidアプリ作成時にAPI通信を行いたいとき、訳合ってOSSライブラリを使用せずに実装する必要がありました。
そのため、 `HttpURLConnection` を使って独自に通信部分を作成しました。

しかし、PATCHリクエストを送りたいときにエラー発生。
なんと、 `HttpURLConnection` はPATCHリクエストを投げられないらしいです。
うそ…だろ…。

`X-HTTP-Method-Override` ヘッダーを使って偽装する方法もありますが、サーバー側の依存もあり確実では無いようです。
https://stackoverflow.com/questions/25163131/httpurlconnection-invalid-http-method-patch

OSSライブラリはどうやってるんだ?
ということで、 [Jersey](https://eclipse-ee4j.github.io/jersey/) というHTTPクライアントライブラリの[公開されているコード](https://github.com/jersey/jersey)を参考にして

元記事を表示

Flutterで作成したアプリをAndroid用でリリースビルドする手順を解説してみる

# 本記事の内容
* Flutterで作成したアプリをAndroid用でリリースビルドする手順を解説

# 前提
* Flutterでアプリが作れていて、シミュレータで動作確認が済んでいること
* GoogleDeveloper登録が済んでいること(リリースするときは結局必須なので・・・)

# 目次
* [keystoreファイル(署名するときの設定ファイル)を作成](#keystoreファイル署名するときの設定ファイルを作成)
* [android/app/build.gradleを編集](#androidappbuildgradleを編集)
* [AndroidManifest.xmlを編集](#androidmanifestxmlを編集)
* [ターミナルでコマンドを叩く](#ターミナルでコマンドを叩く)

## keystoreファイル(署名するときの設定ファイル)を作成

①Macのターミナルで以下のコマンドを叩く。

**`alias`** に指定した文字はあとから使うので覚えておく(以下の場合、最後の「key」の部分)

“`
keytool -genkey

元記事を表示

DialogFragmentの大きさを自由に変えたい

## 背景

ダイアログは基本小さめの画面なことが多いが、カスタムUIでフルスクリーンで表示したり画面比率何%で表示したり自在に操りたいなと思ったので実装してみた備忘録です

・androidX環境
・色々なサイズで使いたい
・xmlはConstraintLayoutで中身を書きたい

stackoverflowはじめ古い記事を見ていると、ParentをRelativeLayoutやLineaLayoutにしようとか、Styleを定義しようと書かれていましたがこちらが簡単かな?と思ったので書くことにします

## フルスクリーン

### 実装

“`FullScreenDialogFragment.kt
package com.example.coroutines

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.f

元記事を表示

Andorid Native + Flutterのビルドに便利なDocker Imageを作る

Androidアプリのビルドによう使うツールをインストールしたDocker Imageの作り方を説明する(Android SDK, Flutter SDK, GCloud, Bundler, Firebase tools)。
Dockerを使ったことはあるが、実用的なDocker Imageを作ったことはない人向けの説明。

## Docker Imageを作る手順
### 1. Dockerfileを記述する

“`Dockerfile
# BaseはCircle CIのものにする。android sdk, gcloudが既に入っているので楽。
FROM circleci/android:api-29-node

# Install firebase tools
RUN sudo curl -sL https://firebase.tools | bash

# Install tools for easylauncher
RUN sudo apt-get update && sudo apt-get install -y fontconfig ttf-dejavu

# Inst

元記事を表示

[Android]エミュレータで Screen Pinning (画面の固定) を解除する方法

# 問題

Screen Pinning(画面の固定)の解除は 戻るボタンとタスクボタンを長押しすることで解除できるが、エミュレータではマルチタップが上手くできなくて解除できない。ちなみに Screen Pinning (画面の固定)とは次のように戻るボタンやタスクボタンなどを効かなくして他のアプリを起動できなくするモードのことです。

| 画面固定設定を変更する | アプリを画面固定する | ボタンが効かなくなる |
| ——- | ——- | ——- |
| Image from Gyazo | 【Android】In-App Review APIを使ってレビュー機能をサクッと作ろう

# In-App Review APIとは

iar-flow.jpg

>The Google Play In-App Review API lets you prompt users to submit Play Store ratings and reviews without the inconvenience of leaving your app or game.

https://developer.android.com/guide/playcore/in-app-review

アプリやゲームから離れずストア評価・レビューをすることができるAPIで、

>During the flow, the user has the ability to rate your app using the

元記事を表示

ボタン連打防止用コード

自分用メモ
・ボタン連打防止用コード
※参考にする場合は、ご自身で検証してください。(検証不十分なため)

“`java:qiita.java

public class TestActivity {

// !!!自分用メモでテスト不十分なことをご承知ください!!!

// バックキー連打防止用フラグ
private boolean backKeyEnabled = true;

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// 連打しようとしたらボタン無効
if(!backKeyEnabled) {
return false;
}
// ボタンを押したら
backKeyEnabled = false;
// ボタンをしばらく押せないようにする
new Handler().postDelayed(new Runnable() {
@Override
public void run() {

元記事を表示

BottomSheet の上に Snackbar を表示する

あまり機会はないかもしれませんが、BottomSheet の上に何かしらのメッセージを Snackbar で表示する方法を調べました。
設定する値を変えれば Spinner などの上でも表示可能かもしれません。

## やり方

方法は色々あるようですが、getView#setZ を利用して高さ(という呼び方でいいのか悩ましいところですが)を変えてあげるのが 1番簡単そうでした。

“` Kotlin:sample

Snackbar.make(
view,
message,
Snackbar.LENGTH_LONG
).apply { view.z = 200f }.show()
“`

## 余談

要件次第ではあると思いますが、本来あるべき順序を変えることになるので、よく検討して利用しましょう。
例えば今回のように結果を表示だけであれば、Toast の方が望ましいように思います。
色んな方法がありますね!

## 参考

以下を参考にさせていただきました<(_ _)>

https://stackoverflow.com/questions/44293412/pl

元記事を表示

【Android】WorkManager+MVVM+Hilt

# WorkManagerとは?
Android Jetpackのライブラリの一つ。
ForegroundServiceやJobSchedulerの代わりになる。
https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja

# やりたいこと
1. アプリから切り離して長時間の処理を行わせたい
2. ロジック部分はWorkManager外に定義したい
3. ついでに通知に結果を流し込みたい

# 1. アプリから切り離して長時間の処理を行わせたい
#### WorkManager基礎部分
“`MyWorker.kt
class MyWorker constructor(
private val context: Context,
private val params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
//

元記事を表示

THETA1台でライブImageBasedLighting

#はじめに
リコーの[Yuuki_S](https://qiita.com/Yuuki_S)です。
弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VやTHETA Z1は、OSにAndroidを採用しており、Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます。(詳細は本記事の末尾を参照)。
***
イメージベースドライティング(IBL : Image-based lighting)という技術をご存知でしょうか?
現実世界の全方向の光情報を環境情報として、CGのレンダリングに利用する手法のことです。
周辺の光源の位置や色合いをCGに反映することで、現実に溶け込んだ表現が可能になるため映像作品やゲームで使用されています。
![IBL比較.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152249/d08329cd-ccfe-3

元記事を表示

Retrofit2とOkhttp3とGsonを使用してAPIを作成(Java)

API作成時の備忘録。
細かい説明は抜きにして、とりあえずこれで通信できた。

– [Retrofit2](https://square.github.io/retrofit/)
– [Okhttp3](https://square.github.io/okhttp/)
– [Gson](https://github.com/google/gson)

##手順
– manifestfileに通信を許可するように設定
– リクエスト、レスポンスを受け取る用のクラスを定義
– エンドポイントの作成
– HTTPクライアントの作成
– 実行

## manifestFileに通信を許可するように設定

“`AndroidManifest.xml“` に以下を記述する

“`java:AndroidManifest.xml

“`

## リクエスト、レスポンスを受け取る用のクラスを定義

ログイン用のリクエストクラス、 requestのbodyがこの形式で送ら

元記事を表示

OTHERカテゴリの最新記事