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

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

KotlinでAndroid

Androidの勉強をしたいけどJavaが全然頭に入ってこないのでKotlinを使うことにしました。自分用の覚書です。

##Kotlin
###log
>print(“hogeohoge”)
println(“HOGEHOGE”)
//=> hogehogeHOGEHOGE

改行するまで出力されません。最初、print()でログに表示されないので困ってました。

##配列
listとかarrayとか。この辺、Java分かってないとダメっぽい。あとで調べる。

>val list = listOf(0, 1, 2)
println(list.javaClass)
//=> class java.util.Arrays$ArrayList

>val mutableList = mutableListOf(0, 1, 2)
println(mutableList.javaClass)
//=> class java.util.ArrayList

>val array = arrayOf(0, 1, 2)
println(array.javaClass)
//=> class [Lja

元記事を表示

[Android] Jetpack Compose (alpha) で Hello World を表示する

# はじめに

最近やっと Jetpack Compose ですが alpha 版がリリースされたみたいですね。良い機会なので Jetpack Compose で宣言的な UI をどんな感じで記述できるのかやってみたいと思います。

# 準備
まず Jetpack Compose での開発をサポートするツールは Android Studio Canary (v4.2.0) にて対応されるみたいです。Jetpack Compose を始める際には Android Studio Canary (v4.2.0) をインストールする必要があるようです。

[Support for Jetpack Compose](https://developer.android.com/studio/preview/features#jetpack-compose)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/b72800b3-d631-530e-b33f-b1025600e215.png)

元記事を表示

Flutterアプリのスクショを極力自動で撮る(Riverpod使用・メソッドの濫用あり)

以前こんな記事を書きました。

[Flutterアプリのスクショを(極力)自動で撮る on AndroidStudio](https://qiita.com/agajo/items/2d2d57561b5880618966)

これでスクショ撮影はだいぶ簡単になった!!と思っていたのですが、

今回新たにゲーム要素のあるアプリを作成しまして、スクショ用の画面を作るためにその**ゲームを攻略する**必要が生じてしまいました。

ストア申請のために言語や端末を切り替えながら毎回ゲームを攻略するなんてとてもやってられません。

アプリコードに手を入れて数値を指定すればどうとでもなりますが、スクショを撮るためだけにあまりアプリを改造したくありません。

ということで、アプリコードを極力改造せず、必要な画面を自動的に生成しながら次々にスクショを撮る方法を確立しました。

アプリコード・スクショ撮るコードどちらも、break pointを打ってデバッグすることができます。

# 基本的な考え方

アプリの画面はアプリの状態の関数です。状態が決まれば画面が決まる。

![ui-equals-f

元記事を表示

GitHub Actionsを使ってAndroidアプリをFirebase App Distributionへ配信するまでのベストプラクティス

# はじめに
どうも、GitHub Actions大好きな[@tarumzu](https://twitter.com/tarumzu)です。
今回はGitHub ActionsでAndroidアプリを配信する際のベストプラクティスな記事がなかなか無いなと思ったので、無いなら作ろう!という試みです。
例としてdev環境とstg環境の2つをApp Distributionで配信するという流れをGitHub Actionsで作ります。

# コード

早速ですがコードの全文です。今回はタスク毎にJobを分けて対応しています。こちらのコードを順を追って説明していきます。

“`yml:.github/workflows/publish.yml
name: publish
on:
push:
branches: # 今回はdevelopブランチをdev環境、release/〇〇〇ブランチをstg環境への配信としてます
– ‘develop’
– ‘release/**’
jobs:
build:
runs-on: ubuntu-latest

元記事を表示

Androidアプリのtargetsdkversionを変更する

# 背景
[過去の記事](https://qiita.com/silverbox/items/1b514f80a7bbbef8ba9f)で、古いAndroidアプリをKotlinに変更したりした。最近またGoogleからAndroidアプリのtargetsdkversion変更指示が来た。
もう新規機能などは何もしていないプロジェクトだが、継続はしておきたい。
自分の為の備忘録で、手順を記載しておく(その頃には手順が変わるのではないかという可能性も高いが、一応)。

# ソースの設定変更

※以下変更箇所で、json形式の設定情報の表記には、hoge.fuga.foo 形式で階層を表現しています(全体図記入すると他の情報が煩わしいので)。直接的にその表現ではない事をご注意ください。

## targetSdkVersion を変える

1. %プロジェクト%/app/build.gradle を開く
2. android.defaultConfig.targetSdkVersion を変える(今回は29)
3. android.compileSdkVersion を変える(今回は29)

元記事を表示

Android Studioをアップデートした際に「some conflicts were found in the installation area」がでた時の対処法

表題の通り**3.3.1=>4.0.1**にアップデートした際に「some conflicts were found in the installation area」とエラーが出てアップデートが完了しないことがありました。

## 対処法
Android Studioを完全にアンインストールし、最新バーションをインストールすることによって、エラーは対処できた。

[MacでAndroidStudioを完全アンインストール – Qiita](https://qiita.com/nagaoyuriko/items/f310b595ff16061e1186)

### 補足
アンインストールの他にもSDKManagerからエラーが発生しているComponentをアンインストールし、再度インストールすると直る方法もあるようです。
今回は事前にホームディレクトリ名などを変更し時間がかかりそうだったので、完全にアンインストールする方法を選びました。

## 参考
– [MacでAndroidStudioを完全アンインストール – Qiita](https://qiita.com/nagaoy

元記事を表示

AndroidにおけるHMSのAPI Keyの二重定義の問題とその解決策

#HMSのAPIキー
[ファーウェイ(Huawei)](https://www.huawei.com/jp/)の[HMS(Huawei Mobile Services)](https://developer.huawei.com/consumer/jp/)は[プッシュキット(Push Kit)](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/service-introduction-0000001050040060)や[マップキット(Map Kit)](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/android-sdk-introduction-0000001050158633)など、複数のキッドより構成されています。特定なキッドを利用するのに、APIキーが必要です。

#APIキーの場所
APIキーはAppGallery Connectの[Project Setting] -> [Gene

元記事を表示

Android課金(定期購入)をはじめて実装するときに読む記事まとめ

知識ゼロの状態からAndroidの課金(定期購入)を実装することがあり、色々な記事を読み漁った時期がありました。
その中で特に参考になった記事をまとめておきます。
(細かい実装に関するものより、概要や全体像を把握するのに役立った記事が多めです)

# 公式ドキュメント
言わずもがな、必読の記事です:thumbsup:
## [Google Play 請求サービスの概要](https://developer.android.com/google/play/billing/billing_overview?hl=ja)
* Android課金の基礎用語集
* 課金タイプは2つある
* `1回限りのアイテム`
* `定期購入`
* サーバーとの連携部分については、REST APIの`Google Play Developer API`や、状態の変化をモニタリングできるサーバープッシュ通知の`リアルタイム デベロッパー通知`などの理解も必要になってくる
* `購入トークン`、`オーダーID`、`SKU`などは実装中にもたびたび出てくる用語なので押さえておく

## [Googl

元記事を表示

IntelliJ/Android Studioのプロジェクトにプロジェクトアイコンを設定しよう

DroidKaigiアプリがプロジェクトアイコンを設定しているので、知っている人も多いと思います。
私もそれで知りました。
しかし、あまりドキュメントとか、設定されているプロジェクトを見かけない気がしたので(私が知らないだけだと思うけど)やり方を書きます。

設定するとWelcome画面やToolboxのプロジェクトリストにアイコンが表示されるようになります。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/7a5a03c3-4c82-3134-8665-c7f01d96fa8d.png)
Toolboxの場合は何もしなければIDEのアイコンが表示されますが、プロジェクトのアイコンが表示されるようになります。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/6e045a86-ff24-78ff-0d68-3f60582effd3.png)
どうでしょう? **カッコいいですよね!** もう、設定する以

元記事を表示

[Jetpack Compose] 今の時点でCompose利用する方法。

## 対象
– Composeを早く使いたい方

## Jetpack

Jetpackのライブラリーが含めているもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/d787bb0b-7c58-ed57-28d4-78931fb3c09d.png)

中にComposeがみえますね。

## Compose

composeは形状とデータの依存関係を記述するコンポーズ可能な関数を使用して、UI をプログラムで定義します。
先週ComposeはAlphaバージョンになりました。

– https://android-developers.googlあもeblog.com/2020/08/announcing-jetpack-compose-alpha.html

## Download
今はAndroid StudioのStableバージョンでは利用できません。
Canaryバージョンの設置が必要です。

– https://developer.android.com/s

元記事を表示

スマホアプリにおける署名について

# Code Signing
iOS/Androidいずれの場合もアプリが改ざんされることを確認できる安全性を確保するために、ビルドしたアプリケーションに電子署名します。これがCode Signingとよばれます。
概念的には同じですが、ストアとの関係やツールの操作方法などがそれぞれ異なるため、混乱しそうです。
(これにビルドサイト(CircleCI/Bitrise等)を利用するとさらにサインするための情報を設定する必要があり、さらに複雑になります)

## 電子署名のざっくりした説明

### 電子署名する
電子署名は改ざんを防止や否認防止などで利用され、PKI(公開鍵インフラストラクチャ)の技術です。あるバイナリ(テキストデータもバイナリ化したうえで)を符号化した情報に対して秘密鍵で暗号化します。その値(A)と符号化、暗号化アルゴリズムを署名のメタデータとして含めます。

### 署名の検証
検証する場合は同様にバイナリを署名のメタデータである符号化アルゴリズムで符号化します。また含まれている暗号化された値(A)を公開鍵で複号化して一致しているかを確認します。
ここで元のバイナリが

元記事を表示

今さらだけど! AndroidのNotificationをJavaで実装してみる(初級編)

# はじめに

Androidの通知(Notification)に関する基本的な使い方を記します。
内容は初心者向けの簡単なものになっています。サンプルアプリをベースに説明したいと思います。

サンプルアプリの環境は以下のとおりです。
– Android Studio 4.0.1
– MacOS 10.15.6
– Android Virtual Device – android10.0 / 1080 x 2160

# Notificationとは
[公式ページ](https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja)によると以下のような記述があります

> 通知は、アプリの UI 以外で Android が表示するメッセージであり、リマインダー、他の人からのメッセージ、アプリからのタイムリーな情報などをユーザーに提供します。ユーザーは通知をタップしてアプリを開いたり、通知から直接操作したりできます。

うーん、難しいですね・・・
要するにスマホのステータスバーに表示されるアレですね

元記事を表示

Androidの通知をM5Core2に転送する

M5Core2を入手したので、何かしようかなあと思ったのですが、画面もついて、バイブレーションもついているので、手持ちのAndroidでブルった通知をM5Core2に表示させてみようと思います。

といいながらも、バイブレーションはまたの機会にしたので、ESP32とディスプレイさえあれば動きます。
M5StickCとM5Core2のどちらでも動くようにしてます。

Android・ArduinoのソースコードをGitHubに上げておきました。

poruruba/NotificationReporter
 https://github.com/poruruba/NotificationReporter

(2020/09/06)修正
Notificationのメッセージの中で、TickerTextもよくつかわれるようでそれも転送し表示するようにしました。

# 仕組み

Androidでは、NotificationListenerServiceを継承したサービスを実装することで、他のアプリ含めてすべての通知を受け取ることができます。
以下を参考にさせていただきました。

NOTIFIC

元記事を表示

Androidスマホでunixbenchを走らせる

Android に linux をインストール

UserLAnd – Google Play のアプリ
https://play.google.com/store/apps/details?id=tech.ula&hl=ja

userland で linux を入れるとポート番号 2022 で ssh ログインができるようになります。

下記アプリなどを使用して 192.168 から始まる IP アドレスを確認します。

IP Tools: WiFi Analyzer – Google Play のアプリ
https://play.google.com/store/apps/details?id=com.ddm.iptools&hl=ja

適当なPCからAndroidへSSHログインを行う

““
ssh username@192.168.xxx.xxx -p 2022 ;
““

unixbench のインストール

~~~~
sudo apt-get update ;
sudo apt-get install git ;
sudo apt-get install bu

元記事を表示

スマホにLinuxを入れてtensorflow liteを実行する

Android スマホに userland で linux を入れて tensorflow lite を実行します。

UserLAnd – Google Play のアプリ
https://play.google.com/store/apps/details?id=tech.ula&hl=ja

userland で linux を入れるとポート番号 2022 で ssh ログインができるようになります。

IP アドレスの確認 192.168 から始まるものを探す

IP Tools: WiFi Analyzer – Google Play のアプリ
https://play.google.com/store/apps/details?id=com.ddm.iptools&hl=ja

~~~~
ssh username@192.168.xxx.xxx -p 2022 ;
~~~~

まずはアップデートとユーティリティのインストール

~~~~
sudo apt update ;
sudo apt upgrade -y ;
sudo apt install -y curl gi

元記事を表示

Compatible side by side NDK version was not found.

[Tools] > [SDK Manager] >[SDK Tools] よりNDKにチェックを入れインストール。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/293f48b6-fb23-edd3-6bb4-fc4556c47e6e.png)

バージョンが異なっていたみたいなのでインストール。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/12e03759-8656-0e15-5f70-97d7194ddede.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/f4086280-c99c-e358-b678-e3bec85027e0.png)

元記事を表示

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

[A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution](https://stackoverflow.com/questions/62131564/a-failure-occurred-while-executing-org-jetbrains-kotlin-gradle-internal-kaptexec)

1.AnalyzeからInspect Codeを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/d6f7767b-a0d9-7c9d-3d14-188416dea859.png)

2.whole projectを選択してOKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700171/dac76117-cb9c-1bd6-08de-3

元記事を表示

[Android]Action Mode を楽に実装する

# はじめに

Android には View などをクリックすると View の周りにメニューを表示したり、ActionBar 上にメニューを表示したりできる ActionMode という機能があります。View の周りにメニューを表示する方法を Floating Action と ActionBar 上にメニューを表示する方法を Primary Action と呼びます。今回は Floating Action と Primary Action の両方の ActionMode を使うための実装方法について説明します。

| Primary Action | Floating Action |
| :——-: | :——-: |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/fc9bf38e-8b6f-4456-e027-4b61636473a0.png) | ![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

Android 共通レイアウト

[レイアウトを使いまわす – 他に定義したレイアウトを読み込ませる方法](https://qiita.com/sussan0416/items/531b77be1676a30b8fab)

元記事を表示

Android RecyclerViewが含まれるViewをTransitionでアニメーションしたときに落ちる

ちょっと詰まったのでメモです。

RecyclerViewがスクロールしているときにTransitionで親Viewのアニメーションが走るとクラッシュしていた。

“`
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:5034)
at android.view.ViewGroup.addView(ViewGroup.java:4865)
at android.view.ViewGroup.addView(ViewGroup.java:4805)
at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:851)

元記事を表示

OTHERカテゴリの最新記事