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

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

【SikuliX】スマホゲームの自動化(スクリプト)

#はじめに
[前回](https://qiita.com/kazu_kr/items/3ad2c46209a2ed28a7be)の記事では、スマホゲームを自動化するための環境構築を行いました。
今回はSikuliXに記述するサンプルコードを記載していきます。

#注意事項
スマホゲームによっては、利用規約でマクロ等を用いたプレイ行為が禁止されています。
動作させる場合はスマホゲームの利用規約を確認し、自己責任で使用してください。

#サンプルコード
“`
#########################################
# 検索設定
#########################################
IMGS = [検索したい画像を設定]

#########################################
# 動作設定
#########################################

# 最小一致閾値
Settings.MinSimilarity = 0.85

# マウス移動のディレイ:0 = アニメーショ

元記事を表示

アイコンのサイズを調整するカスタムButtonを作ってみた

#アイコンのサイズを調整するカスタムButtonを作ってみた
AndroidでVectorDrawableをアイコンとしてボタンに表示させて使っていたが解像度別にアイコン(画像)を用意するだけだと、端末によっては
大きすぎたり小さすぎたりして今一だったのでボタンサイズに合わせてアイコンサイズを調整するカスタムボタンを作ってみました。

## カスタムViewにした理由
画像のリサイズにViewのサイズを使いたかったがfragmentやactivityでやろうとすると[ViewTreeObserver](https://developer.android.com/reference/android/view/ViewTreeObserver)使わないといけなくてめんどくさかったし、別に作った当時はView内部で完結しててよかったので。

##実装
android.widget.Buttonを継承したCustomButtonクラスを作成しコンストラクタとonLayoutを実装する

// 1.0(フルサイズ) 〜 0.0
var mRatio = 0.55

元記事を表示

AndroidStudioで、Buttonオブジェクトに背景画像を設定するときの問題点と解決法

#AndroidStudioで、Buttonオブジェクトに背景画像を設定するときの問題点と解決法
###AndroidStudioで、Buttonオブジェクトに背景画像を設定しても画像が反映されない問題があります。

以前からButtonオブジェクトのbackgroundTintプロパティに色を指定しても、Buttonの上下に隙間ができてしまうということがありました。(余白をあまり空けたくないときに困る)
これは、AndroidStudioにデフォルトで設定されている色の画像の上下に余白が含まれている為に発生しているようです。(Buttonオブジェクトのプロパティで「layout_marginTop」や「layout_marginBottom」,「paddingTop」や「paddingBottom」の値を0dpに指定しても消えません!)
![qiita_button1e2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794916/b9128fdf-7783-73ed-f205-00f39d148ac

元記事を表示

Android 検証端末10選(2021年春)

# はじめに

Android端末のスペックを眺めるのが趣味の @KentaHarada です。

みなさんはAndroidアプリの検証をする時どんな機種を使っていますか?
Androidアプリ開発者の方は、とりあえずPixelを使っているという方も多いと思います。
でも、Pixel以外にも多種多様なAndroidが発売されていますよね。時間と予算が許せば
なるべく多くの端末で検証したいところですがそうもいきません。売れ筋の端末を
2〜3機種見繕って検証する、というケースも多いかと思います。

そこで今回は、検証に使うと良さそうなAndroid端末10機種選定してみました。
私個人の好みや主観も入っていますが、検証端末選びの参考にして頂ければ幸いです。

※選定した端末は**2021年4月**の情報をベースにしています。

# 選定ポイント
選定のポイントは以前書いたこちらの記事にまとめています。

https://qiita.com/KentaHarada/items/2baa4702f1dfda0c6ada

特に重視したのは以下のポイントです。

1. 素のAndroid

元記事を表示

Android studioでJacocoを使って、手動で一つずつテストケースを実行して、カバレッジレポートを作成する方法

Android studioでtestCoverageEnabledフラグをtrueにしたら、createDebugCoverageReportという機能が使えます。
しかしcreateDebugCoverageReportを実行したら、全てのUnit test / Instrumented testのテストケースが実行されます。環境に依存するテストケース(Internet、周辺機器など)がFailになってしまいます。

本文は手動でカバレッジレポートの作成方法を説明します。

#実行環境
・Android Studio 4.1.1
・compileSdkVersion 29
・Gradle version 6.5

#jacoco.gradleの作成
appあるいはmoduleのbuild.gradleと同じフォルダーにjacoco.gradleを作成します。

“`jacoco.gradle
apply plugin: ‘jacoco’
jacoco {
toolVersion = “0.8.4”
reportsDir = file(“$projectDir/re

元記事を表示

【SikuliX】スマホゲームの自動化(環境構築)

# はじめに
最近のスマホゲームでよくあるのが何度も周回を繰り返すゲームです。
しかし、ポチポチやるのも時間が勿体ないし、キリがない。
単純作業は自動化する習慣がついているので、自動化するための環境構築を備忘録として残します。

#使用するもの
* PC(Windows10 64bit)
* Java 64bit
* SikuliX(http://sikulix.com/)
* androidエミュレータ(Nox, BlueStacks等)

#手順
①Java 64bitをインストール
 SikuliXを動作させるためには、Java 64bit版が必要になるため、Windows オフライン (64ビット)を以下のページよりダウンロードし、インストールする。
 https://java.com/ja/download/manual.jsp
 
②SikuliXをインストール
 https://raiman.github.io/SikuliX1/downloads.html
 から以下ファイルをダウンロードし、任意の保存場所に配置する。
 ・sikulixapi.jar
 ・jyth

元記事を表示

KotlinでViewを動的に動かす

KotlinでViewを定義する

“`kotlin
val button: Button = Button(this)
// 変数名 Viewの種類 左と同じ
“`
これによりxmlファイルでボタンを設置したときのようにActivity上にButtonを置く準備ができた

xmlファイルでLainerLauputを定義する

“`xml

“`
これは、普通にXMLファイルでViewをドラッグアンドドロップするだけでよい
この時初期状態では、LinerLaoutにidがついていないので、コードか、GUI上で好きなidを設定しましょう

元記事を表示

Androidのライブラリモジュールにビルドプロパティを渡す

# やりたいこと
Androidというか、Java/KotlinでGradle使ってビルドしている場合の話かと思います。

ライブラリモジュールがあって、以下のように`BuildConfig`を使ってデバッグフラグなどを制御している。

“`lib/build.gradle
android {
//…

defaultConfig {
buildConfigField(“boolean”, “DEBUG_FLAG_FOO”, “false”)
buildConfigField(“boolean”, “DEBUG_FLAG_BAR”, “false”)
buildConfigField(“int”, “DEBUG_RESPONSE”, “1”)
}
“`

で、これを、ビルドコマンドでコンソールからビルドする時に指定してビルドしたい。
という場合にどうすれば良いのか調べたので、そのメモです。

# 前提

ライブラリプロジェクトはアプリプロジェクトにincludeされている形です。publicなリポジトリに公

元記事を表示

[Unity]Android向けIL2CPPビルドエラー:UnityLinker.exe did not run properly!

前言

少しでも、やくになってたらそれで楽しい!

Android向けIL2CPPビルド試した環境

##### Windows
Unity2018.4.26f1, Unity2018.4.32f1, Unity2020.2.3f1

最初何回は問題なくビルドできてましたが、一回失敗したら、後からビルド成功率がひくい、たが、成功する時もありました。

##### Mac
Unity2018.4.26f1

成功できず。。

### よく出るエラーメッセージ
省略…UnityLinker.exe did not run properly!…省略

省略…Temp\StagingArea\assets\bin\Data\Managed’, Native error=指定されたファイルが見つかりません。…省略

みたいのがでてる。

解決モードに入ってみた!

ネットからいろいろ検索してみたら、同じ問題にあった人がいっぱいいた!。(なんか少し嬉しい、ひとりじゃない!みんながいる!)
ネットの情報通り**Windos環境**で、いろいろいじってみた所解決できな

元記事を表示

[Android × Kotlin]端末の位置情報がOnかOffを判断

位置情報をOnかOffを判断

“`kotlin.kt
private fun isLocationEnabled(): Boolean {
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
return LocationManagerCompat.isLocationEnabled(locationManager)
}
“`

オンならtrueオフならfalseが返ってきます

元記事を表示

[Android×kotlin]端末がオンラインかオフラインを判断

オンラインかオフラインか

タイトルの意味のままです

“`kotlin.kt
private fun isOnline(): Boolean {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
return networkInfo?.isConnected == true
}
“`

オンラインならtrueオフラインならfalseが返ってきます

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順10-GMS端末で権限取り消し

# REST APIによる権限取り消し機能の実装方法
次のAPIでログイン時に返ってきたアクセストークン(IDトークンではない)をパラメータとして渡し、権限を取り消します。

API:https://oauth-login.cloud.huawei.com/oauth2/v3/revoke
メソッド:POST
パラメータ:

|パラメータ名|値|
|:—:|:—|
|token|https://oauth-login.cloud.huawei.com/oauth2/v3/token のレスポンスのaccess_token|

“`kotlin:HmsHuaweiIdLogic.kt
override fun cancelAuthorization(context: Context, accessToken: String) {
val queue = Volley.newRequestQueue(context)

val postRequest: StringRequest = object : StringRequest(
Method.

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順9-GMS端末でログアウト

# REST APIによるログアウト機能の実装方法
ログアウトのREST APIがありません。そのため、ログアウト時に行うのは、ユーザー情報を非表示にするなどの処理だけでよいです。

“`kotlin:NonHmsHuaweiIdLogic.kt
override fun signOut() {
// ローカルのログイン情報を消す
}
“`

# シリーズ
– [Android端末におけるHUAWEI IDログイン機能の詳細実装手順1-ソリューションの概要](https://qiita.com/Rei_2020/items/e02814bd688a41ab8702)
– [Android端末におけるHUAWEI IDログイン機能の詳細実装手順2-実装準備](https://qiita.com/Rei_2020/items/2eb9dada38cdfc2729ef)
– [Android端末におけるHUAWEI IDログイン機能の詳細実装手順3-HMS判定](https://qiita.com/Rei_2020/items/285107103be525ce3f98)
– [A

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順8-GMS端末でログイン2

# IDトークンからユーザー情報を取得する方法
IDトークンはJWT(JSON Web Token)です。それをデコードする方法が2つあります。

1.HUAWEI Account Kit serverが提供しているAPI(デバッグ以外は非推奨)
2.JWTDecode.Androidでデコード

### HUAWEI Account Kit serverが提供しているAPI
API:https://oauth-login.cloud.huawei.com/oauth2/v3/tokeninfo
メソッド:POST
パラメータ:

|パラメータ名|値|
|:—:|:—|
|id_token|IDトークン|

“`kotlin:NonHmsHuaweiIdLogic.kt
private fun decodeIdToken(
context: Context,
idToken: String
) {
val queue = Volley.newRequestQueue(context)

val postRequest: Strin

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順7-GMS端末でログイン1

# REST APIによるログイン機能の実装方法
ログイン機能は3つの処理に分けられます。
1.ログイン画面を表示する処理
2.ログイン結果(認証コード)を受け取る処理
3.認証コードをIDトークンに交換する処理

### ログイン画面を表示する処理
まず、Webログイン画面のリンクを生成します。
リンク:https://oauth-login.cloud.huawei.com/oauth2/v3/authorize
パラメータ:

|パラメータ名|値|
|:—:|:—|
|client_id|AppGallery Connectのプロジェクト設定に表示されるApp IDです。
AGCUtils.getAppId()を使えば、agconnect-services.jsonの中の”app_id”の値を取得できます|
|scope|”openid+profile”|
|response_type|”code”|
|access_type|必須ではないが、”offline”を渡せばリフレッシュトークンも返ってきます|
|redirect_uri|AppGallery Conne

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順6-HMS端末で権限取り消し

# Android SDKによる権限取り消し機能の実装方法
1.HUAWEI ID認証サービスのcancelAuthorization()を使って権限を取り消します。
2.処理結果のコールバックをaddOnCompleteListener()で追加すれば、権限取り消し結果(isSuccessful)を受け取れます。

“`kotlin:HmsHuaweiIdLogic.kt
override fun cancelAuthorization(context: Context) {
authManager?.let {
it.cancelAuthorization().addOnCompleteListener { task ->
if (task.isSuccessful) {
// 権限取り消しが成功したときの処理
} else {
// 権限取り消しが失敗したときの処理
}
}
}
}
“`

#

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順5-HMS端末でログアウト

# Android SDKによるログアウト機能の実装方法
1.HUAWEI ID認証サービスのsignOut()を使ってログアウトします。
2.ログアウト処理の成功時コールバックと失敗時コールバックを追加します。
3.成功した場合、アプリの仕様次第、表示中のユーザー情報を非表示にするなどの処理を行います。

“`kotlin:HmsHuaweiIdLogic.kt
override fun signOut() {
authManager?.let {
val signOutTask: Task = it.signOut()
signOutTask.addOnSuccessListener {
// ログアウトが成功したときの処理
}.addOnFailureListener { exception ->
// ログアウトが失敗したときの処理
exception.printStackTrace()
}
}
}
“`

#

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順4-HMS端末でログイン

# Android SDKによるログイン機能の実装方法

ログイン機能は2つの処理に分けられます。
1.ログイン画面を表示する処理
2.ログイン結果を受け取る処理

### ログイン画面を表示する処理
1.HuaweiIdAuthParamsHelperでログインパラメータを生成します。
2.HuaweiIdAuthManager.getService()でHUAWEI ID認証サービスを取得します。
3.startActivityForResult()でHUAWEI IDのログイン画面(別Activity)を開きます。

“`kotlin:HmsHuaweiIdLogic.kt
companion object {
private const val REQUEST_CODE_SIGN_IN_AUTHORIZATION_CODE = 1000
}

private var authManager: HuaweiIdAuthService? = null

override fun signIn(activity: Activity) {
val param = Hu

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順3-HMS判定

# HMS判定方法
HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable()で判定します。
端末にHMSが入っている、戻り値がtrueになり、HMSが入っていなければ、戻り値がfalseになります。

“`kotlin
if (com.huawei.hms.api.ConnectionResult.SUCCESS == HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context)) {
// HMSあり
// HMS Account KitのAndroid SDKを使います
} else {
// HMSなし
// HMS Account KitのREST APIを使います
}
“`

Strategy パターンを使う場合、ソースコードが次のようになります。

“`kotlin:MainActivity.kt
private lateinit var huaweiIdLogic

元記事を表示

Android端末におけるHUAWEI IDログイン機能の詳細実装手順2-実装準備

# HMS Account Kitの利用準備
HMS Account Kitを利用するのに、Android SDKとREST APIを問わず、まずAppGallery ConnectでAccount Kitのサービスを開通しておく必要があります。開通手順については“[HMS Account Kit実装入門](https://qiita.com/Rei_2020/items/81001ffc6299e56401c8)”をご参照ください。

ここで気を付けなければならないのは、リダイレクトURIを設定することです。
このURIはREST APIを利用するのに必要なので、必ず設定しなければなりません。ただ、必ずしも実在しているURIじゃなくてもよいです。

スクリーンショット 2020-10-01 233255

# ラ

元記事を表示

OTHERカテゴリの最新記事