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

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

AndroidStudioでブランチ切り替えた時に起こった謎のエラー

# 経緯
AndroidStudioでのアプリ開発時、別ブランチのアプリをビルドする際に下記のエラーが発生しました

「__*Entry name ‘res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xml’ collided*__」

探しても上記のファイルはどこにも見当たらず

# 結果
原因の詳細は分からなかったが、以前ビルドしたapkとの衝突が起きているようだったので、それらを削除してあげることで解消できました

Variantsによってフォルダは異なりますが、候補となるのは下記のフォルダと思われます

– projectFolder\build
– projectFolder\debug
– projectFolder\release
– projectFolder\app\build
– projectFolder\app\build\debug
– projectFolder\app\build\release

これらの中からapkが入っているフォルダを全て削除することでビルドすること

元記事を表示

システム情報ダイアログをUIテストする

## はじめに
業務でAndroidを初めて触っていて、テストコードを書くことになったのでコードを書く上で困った点の備忘録および日本語の記事が一切なかったので情報共有の記事になります。

## 対象読者
Androidエンジョイ勢
テストコードを書くことの素晴らしさを感じ始めた人
検索: Espresso Permission dialog とかしてる人

## 環境
– minSdkVersion 26
– targetSdkVersion 29
– gradle 4.0.0
– kotlin 1.3.30
– espresso 3.2.0
– uiautomator 2.2.0

## AndroidのUIテストについて
Androidのテストとしては、主にUI絡みのテスト(AndroidTest)と単体テスト(test)があります。
その中で、AndroidTestのやり方として2つあって

– Espresso
単一アプリのUIテストをする
– Uiautomator 複数アプリのUIテストをする

と別れていることが公式のドキュメントを見れば分かると思います。
この文面だけを

元記事を表示

#11 Kotlin Koans Introduction/SAM conversions 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans/Object expressionsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 インターフェース/SAM conversions

インターフェース:抽象関数のみ(プロパティは定義されていない)で構成されるクラス。

SAM (Single Abstract Method)インターフェース:抽象関数がただ1つで構成されるインターフェース。

SAM coversionsとは、**SAMインターフェース(のオブジェクト)を引数として要求する関数には、ラムダ式が渡せる**といったルールです。

#3 Introduction/SAM conversionsの解説

[Kotlin Koans Introduction/SAM conversions](https://play.

元記事を表示

#10 Kotlin Koans Introduction/Object expressions 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans/Object expressionsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 オブジェクト式(Object Expressions)

オブジェクト式とは、無名クラスのオブジェクトを生成するための`object`という表現のことです。

(※無名クラスとは、特定のクラスを継承したクラスであり、かつクラス名が無く**宣言と利用**を同時に行うクラスのことです。)

具体例を見てみましょう。

“`
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { /*…*/ }

override fun mouseEntered(e: Mo

元記事を表示

新google play consoleでのAndroidアプリ時間指定リリースの設定方法

google play consoleのUIがバージョンアップされ、時間指定リリースの方法がわからず、チャットにて問い合わせしたので備忘録です。

## チャットでの解答

> 公開の概要 > 青文字の「管理」 > 管理対象の公開をオン

で時間指定リリースの有効化ができるとのことでした。
(まだ、公式のドキュメントの更新は追いついておらず)

## せっかくなのでスクショ
![console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47244/80ace5cf-5fa1-361a-0dcc-cfbf451de709.png)

![公開の概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47244/a4236813-f9f9-b911-f3cb-c7b738afa0f9.png)

![公開の概要2.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

【Android】Bitmapのピクセル操作

Javaのコードはあったが、Kotlinはあまり内容だったので、メモ

“`Kotlin
fun Bitmap.filter(): Bitmap {
val pixels = IntArray(width * height)

getPixels(pixels, 0, width, 0, 0, width, height)

for (y in 0 until height) {
for (x in 0 until width) {
//ここでピクセル操作(この場合は色反転を行っている)
pixels[x + y * width] = pixels[x + y * width] xor 0x00ffffff
}
}
return copy(Bitmap.Config.ARGB_8888, true).apply {
setPixels(pixels, 0, wid

元記事を表示

Androidカメラのプレビュー表示(Camera API + TextureView)

# 前書き
前編では[Androidカメラのプレビュー表示(Camera API + SurfaceView)](https://qiita.com/Rei_2020/items/b1bb2e9fbec7d9cc0830)について述べました。本編ではそれを踏まえて、Camera API + TextureViewの実装方法を紹介します。注意点は前編と同じで、TextureViewについての注意点は特にありません。

実装方法はCamera API + SurfaceViewのとかなり被る部分があるので、ここではあえて実装の差分のみ説明します。[Androidカメラのプレビュー表示(Camera API + SurfaceView)](https://qiita.com/Rei_2020/items/b1bb2e9fbec7d9cc0830)と合わせてお読みいただければ幸いです。

# 実装
## レイアウト
SurfaceViewをTextureViewに置き換えます。

“`xml:main_fragment.xml

元記事を表示

Androidカメラのプレビュー表示(Camera API + SurfaceView)

# Androidのカメラプレビュー
Androidでカメラのプレビューを表示するのに、大きく分けて2ステップがあります。

1. カメラを開く
2. カメラ画像をディスプレイに表示する

カメラを開く方法は2つあります。

* Camera API(android.hardware.Camera)
* Camera2 API(android.hardware.camera2)

カメラ画像をディスプレイに表示する方法も2つあります。

* SurfaceView
* TextureView

つまり、Androidのカメラプレビューを実現するのに、合計4つの方法があるというわけです。ネットでは4つの方法をまとめて紹介する記事がなかなか見つからないので、ここで紹介させていただきたいと思います。

本稿ではCamera API + SurfaceViewの実装方法と注意点を重点的に紹介します。

# 実装
## レイアウト

“`xml:main_fragment.xml

元記事を表示

GDG DevFest 2020 勉強会に参加した

## 開催日程
* 2020年10月17日(土曜日)

## 場所
* オンライン

## 主催
* GDG Tokyo

## 申し込み
* https://gdg-tokyo.connpass.com/event/190079/

## 費用
* 無料

## DevFestとは
* Google Developer Group (GDG) コミュニティによって世界各地で開かれるデベロッパー向けイベント

## セッション – Flutterはプロダクション開発に耐えうるのか
* モバイルアプリの開発の現状と課題
* Androidアプリ開発の黎明期
* MVCフレームワーク
* Java
* eclipse, Maven
* Androidアプリ開発の成熟期
* MVVM, FLUX
* Kotlin, Java
* Dagger2, Gradle, Android Studio
* 課題
* iOS/Androidの機能仕様ずれ(SDKやライブ

元記事を表示

Android StudioでXML要素が勝手に並び替えられてしまう問題

最初は以下のように記載していた

“`


元記事を表示

Flutter build error が起きたときにするべきこと

# はじめに
[Flutter](https://codezine.jp/article/detail/12718)とはネイティブアプリを開発するためのフレームワークとして2018年にGoogleが発表しました。今回はFlutterでbuildしているときにエラーが発生したときにするべきことを書こうと思います。

# 最初に、、 【エラー状況を知る】
実際にどういうエラーなのかなどの詳細を知るためには以下のコマンドを入力してください。これでflutter runコマンド実行中の詳細ログを表示します。

“`
$ flutter run –verbose
“`

# 手段1 【flutter clean】
Flutter build errorが発生したときに一番最初にやるべきことはflutter cleanです。

“`
$ flutter clean
“`

30%のエラーはこの方法で解決します。手段2以降はこの方法でもうまくいかなかった人向けです。

# 手段2 【Pod関連を再インストール】

“`
$ flutter clean
$ rm -Rf ios/Pod

元記事を表示

Android NDKのCMakeを使用したProductFlavorごとにネイティブコードを分ける方法

# TL;DR
build.gradleのproductFlavorsでFlavorごとに引数を与えてCMakeListsで分岐させる。

# Android NDKとは
Android NDK は、C / C++(ネイティブ コード)を Android アプリに埋め込むことができるツールです。
重い演算処理、ネイティブコードに秘匿情報を記述しデコンパイルしても見えないようにする、等に使用されます。

# CMakeとは
コンパイラに依存しないビルド自動化のためのツールです。androidで言うところのgradleですかね・・・・(レイヤーが違う気もする(anroidはjava自体はコンパイラに依存しないようになってますので)がビルドツールという点では一緒)

# ProductFlavorとは
[ProductFlavor](https://developer.android.com/studio/build/build-variants?hl=ja#product-flavors)
環境依存のコード(API endpointやその他環境変数)を難しいことをせずにソースファイルごとま

元記事を表示

[Android/Kotlin]AndroidStudio4.1でViewModelを使う

なんか前のやり方でできなくなってたので

# 環境
– Android Studio 4.1
– Kotlin
– Mac

# 結論
### ライブラリ
“`xml:build.gradle(app)
plugins {
id ‘kotlin-android-extensions’
}

dependencies {
// ViewModel
implementation “androidx.activity:activity-ktx:1.1.0” // Activityから使う時
implementation “androidx.fragment:fragment-ktx:1.2.5” // Fragmentから使う時
}
“`
バージョンは
[Activity – AndroidDeveloper](https://developer.android.com/jetpack/androidx/releases/activity?hl=ja)
[Fragment – AndroidDeveloper](https://developer.a

元記事を表示

#9 Kotlin Koans Introduction/Extension functions 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans/Extension functionsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 拡張関数

拡張関数とは、**継承を用いずに特定のクラスに対して追加した関数**のことです。

拡張関数はオリジナルのクラスに定義された関数と同様に参照することができます。

以下が拡張関数の定義と参照です。

“`
拡張関数の定義
fun MutableList.swap(index1: Int, index2: Int) {
val tmp = this[index1]
this[index1] = this[index2]
this[index2] = tmp
}

拡張関数の参照
val list = mutableListOf(1, 2, 3)
list

元記事を表示

#8 Kotlin Koans Introduction/Smart casts 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans/Smart castsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2-1 when構文

when構文は、**if構文**の仲間のようなもので、条件ごとに結果が分岐します。
以下がwhen構文の例です。

“`
when (x) {
1 -> print(“x == 1”)
2 -> print(“x == 2”)
else -> {
print(“x is neither 1 nor 2”)
}
}
“`
変数xが1のとき`x == 1` が表示され、2のときは`x == 2`が表示され、それ以外の場合`x is neither 1 nor 2`が表示されます。

#2-2 Smart cast

cast(キャスト)とは**変数

元記事を表示

FlutterアプリをGitHub Actionsを使ってwebアプリとandroid apkを同時にbuildし公開するまで

# はじめに
私は普段休みの日の朝を中心に、普段家庭内の生活に使ったり、子供と遊ぶための便利なアプリなどを作ってます。
個人開発なので、あまり手間をかけずにサクッと色んなものを作りたいと思っていたときに
[Flutter](https://flutter.dev/)に出会いました。
Flutterはほぼローコード開発ツールやノーコードツールと同じくらいと言っていいくらい
あまり手間がかからずそれなりのアプリをサクッと開発できます。
はじめは、手元でbuildし、いちいちサーバにdeployするといった作業をしていましたが、貴重な土日の朝の時間
少しでも手間を減らしたいと思っていました。
手元ではコードを書いてテストを走らせ、かんたんにエミュレータで確認すると言った作業だけに集中し、
buildやdeployはGitHub Actionsに任せようと思い色々調査をした結果をメモしています。

# flutter web を使ってwebアプリを gh-pagesに公開する
## 前提
この記事では前提として下記を想定しています。
– Flutterでアプリ開発をしている
– GitHub上

元記事を表示

FileProvider.GetUriForFileでハマった(Java.Lang.NullPointerException、Java.Lang.IllegalStateException)

VIsualStudio2017, XamarinでAndroidアプリの勉強中、
FileProvider.GetUriForFileでハマりました。

##起こったエラーと解決方法
* ####Java.Lang.NullPointerException
providerがタグの外に出ていた。
入れ子になっていないと読み込んでくれなかった。

* ####Java.Lang.IllegalStateException
SpecialFolder.Personal(内部領域)を使用しているのに、
filepaths.xmlのタグがfiles-pathではなくexternal-pathになっていた


まず、前提として「file://~」を使った書き方はAPIが更新されていて使えないので、FileProviderを使ったやり方で実装しましょう(2019/4月)
※でも、Webのブログなどにはfileを使ったやり方がたくさんのっていて辛かった。

ちなみに、AndroidのReferenceは僕には合わなかった。
Xamarinのドキュメン

元記事を表示

Chromebookで開発するメモ

Chromebookを開発マシンとして使おうと数日設定したときのメモ。

# 結論 (ChromeOS 86の時点)

結論としてはLinux開発マシンとして十分使える。
特にWebアプリ開発や外部サーバーにSSHでつなげて作業する場合は便利。

しかし、課題はLinux側の日本語入力。Mozcを入れてLinux側でも日本語の入力が可能だが非常に不安定。日本語入力が必要ならChromeOS側のAndroidアプリやLinux側でエディタサーバーを起動してChrome側へアクセスしてやると良い。

# どのLinuxを使うか

たくさん選択肢がある。多いことは良いことだがどれにしてよいか悩む。

– ChromeOS標準のLinuxコンテナのcrostini — Debian
– AndroidアプリのTermux — Androidとの親和性高し
– AndroidアプリのUserLand — 好きなOSを選べる
– ChromeOSを開発者モードにして使うcrouton — 開発者モードが悪

手軽に始められてDebianが使えるのがcrostini。Chro

元記事を表示

【Kotlin】WebViewからFirebase 向けGoogle アナリティクスにイベントを送りDebugViewで検証する

AndroidアプリのWebView内から発生させたイベントをネイティブ側のFirebase向けGoogleアナリティクス(あるいはApp+Webプロパティ、GA4)にて計測するための方法。

[Googleの公式ヘルプガイド](https://firebase.google.com/docs/analytics/webview)にandroid向けにはJavaのサンプルコードが記載されていたもののKoltlin版が無かったので作成しました。

# 1. Android プロジェクトに Firebase を追加
以下リンクの「オプション1」の手順通りにやればらくらく。
https://firebase.google.com/docs/android/setup
最後の手順の「アプリを実行してインストールを確認」が何度リトライしても上手く行きませんが大抵スキップして翌日チェックしたら成功してます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103957/ba5acc79-1d17-e7

元記事を表示

futterのインストールからサンプルプログラムを動かすまで

## 目的
– モバイルアプリの開発を1つのコードで実装することを目的とし、そのためのツールとしてFlutterを使用することとした
– Flutterのインストールを行い、インストール後の確認としてサンプルプログラムを作成してiOSとAndroidの各シミューレタで動かす

## 環境
– OS:macOS Mojave(10.14.6)
– iOS向けのコマンドラインツール等はインストール済み(iOSの開発をした端末を使用)
– 動作確認はVSCodeを使用(インストール済み)

## flutterのインストール
– gitからclone

“`bash
# 開発用フォルダへ移動
cd /Users/xxxx/develop
# gitから取得
git clone https://github.com/flutter/flutter.git
“`

– flutterへパスを通す

“`bash
# bash_profileへ設定追加
export PATH=”\$PATH:

元記事を表示

OTHERカテゴリの最新記事