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

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

Re:ゼロから始めるbuild.gradle.kts生活

# はじめに
タイトルにあるように `build.gradle.kts`をAndroidアプリ開発で使っていこうと思います.
また,マルチモジュールでプロジェクトを運用する際に同じような記述を共通化させる部分の紹介もしたいと思います.

最初,Android StudioでNew Projectすると `build.gradle`というGroovyで記述されたスクリプトファイルが生成されます.
Groovyはあまり聞き慣れませんが,Javaから派生した動的型付けのプログラミング言語です.

`build.gradle`でGroovyを使う際のイマイチな点として以下のものが挙げられると思います.
– 普段はJavaやKollinで開発するのに `build.gradle`だけGroovyで書かなければいけないく,JavaやKotlinで得た知見を`build.gradle`に活かせない
– 補完が効かない

大きくこの2つかなと個人的な見解として思っています.
DroidKaigi2019の[セッション](https://droidkaigi.jp/2019/timetable/7086

元記事を表示

kaptでjavaの予約語のプロパティを使わないほうがいい

# TL;DR
**kotlin -> javaのcode generationを行うときは変数名にjavaの予約語は使わないほうがいいよ**

# kaptとは
– javaのAnnotation processorsをkotlinでサポートするpluginのこと
– android開発ではおなじみのdagger2やDataBindingで使用することが多い
– アノテーションを付けたクラスを付けてkaptを走らせるとアノテーションを読み取ってコードを自動生成してくれる

# 見つかった経緯
– androidの公式ORMのRoomを使用していてぶつかりました
– ある公開APIの返却のレスポンスjsonでキー名が**catch**というものをその定義のままRoomを使用してローカルDBに保存しようとしてたらビルドがこけて調べました

## Room
– Roomはgoogleが作っているSQLiteを抽象化してくれるライブラリです
– [公式HP](https://developer.android.com/topic/libraries/architecture/room?hl=

元記事を表示

Android 11でShortcutBadgerを使えるようにする

# ShortcutBadgerが使えない!

Android 11対応を行っていたところ、バッジの更新が出来なくなっていることに気が付きました。
アプリは [ShortcutBadger](https://github.com/leolin310148/ShortcutBadger) を使用してバッジの更新をしていました。

# 原因と対策

原因は Android 11 から追加された [Package Visibility](https://developer.android.com/preview/privacy/package-visibility) によって、他のパッケージへのアクセスが制限されたことによるものでした。

対応は、ShortcutBadgerのintentを許可するよう、マニフェストファイルに追加するだけです。

“`xml:AndroidManifest.xml




元記事を表示

Unit Test 探求記(その3)

# はじめに
[前回](https://qiita.com/beyondseeker/items/f8ab1699784b6b3b5082)は、build.gradle から build.gradle.kts への書き換えを行いました。

今回は、LiveData のテストを行ってみようと思います。

# テスト対象
今回は、[Transformations#map(LiveData, Function)](https://developer.android.com/reference/kotlin/androidx/lifecycle/Transformations#map(androidx.lifecycle.LiveData,%20androidx.arch.core.util.Function)) に対して複数の [LiveData](https://developer.android.com/reference/kotlin/androidx/lifecycle/LiveData) を受けられるようにしたメソッドを作成して、それをテスト対象とします。

## ◆ Transf

元記事を表示

中華の闇 携帯電話

# 4月1日から使い始めた中華製のスマホUMIDIGI X ついに壊れました。(7月26日現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/e8c7950c-df6a-341f-1ca1-6a219b76a1dd.png)

#115日間で壊れたことになります。
## 壊れた場所は、type cのソケット毎日、PCに接続して充電したり、Visual studioのadb に接続していた。
原因は、ケーブル側のソケットの形状が悪いために、本体側のソケットが破損される。
#アマゾンで購入すると1年間の保証付きである。
当然修理依頼のチャットを出した。らちが明かないので、電話した。
#なんだ修理してくんない!,金返すから送れになった。
中国人女性は、電話の向こうで賢そうな応対してくれた。(ハッカーに対して高圧的なしゃべり)
日本語勉強しても、日本的な女性的なものの勉強がたりない。
要するに、通常の使い方していたかいなかを論破しようとした。
この電話を使い始めた理由は、ジャーナ

元記事を表示

Unit Test 探求記(その2)

# はじめに
[前回](https://qiita.com/beyondseeker/items/ecc294d0ca39a49e475f)は、Android Studio を用いて自動生成されたプロジェクトの unit test を確認してみました。

– Android Studio から Android プロジェクトを自動生成
– unit test と instrumented unit test を実行
– 依存関係の確認

今回は、build.gradle を build.gradle.kts に書き換えてみようと思います。

# root
## ◆ build.gradle
[src](https://github.com/beyondseeker/chrono0013/blob/4c19532e449c025eee9ec76365a69e45c31b5cfc/build.gradle)

“`groovy
// Top-level build file where you can add configuration options common to all sub-

元記事を表示

Unit Test 探求記(その1)

# はじめに
Unit test に関して、あまりトピックを絞らずに、まったりと実験しつつ、その過程を綴ってみようと思います。

# 新規プロジェクトの作成
まずは、Android Studio にて、新規のプロジェクトを作ってみました。[^1]

# Unit Test の実行
ここで言う unit test とは、src/test 以下のテストのことを指しています。

わざと間違えて、テストが実行されていることを確認してみます。[^2]

“`kotlin
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
// assertEquals(4, 2 + 2)

// わざと間違えてみる。
assertEquals(5, 2 + 2)
}
}
“`

“`
$ ./gradlew clean test –info

com.objectfanatics.myapplication.ExampleUnitTest > addition_isCor

元記事を表示

AWS CodeBuildでFlutterのAdd-to-app向けのMavenリポジトリを作成する。

先日の[GDG Tokyo Flutter Meetup](https://gdg-tokyo.connpass.com/event/181844/)の**既存アプリにFlutterで新機能を追加しよう**というセッションに感銘を受けて、[FlutterのAdd-to-app](https://flutter.dev/docs/development/add-to-app)を始めました。そのセッションでは

*モジュールからAARをビルドして既存アプリに追加
社内Mavenリポジトリを運用していてそこに相乗りするなどのケース*

という説明があり、MavenリポジトリにAARを置くとネイティブアプリが簡単にビルドできるようになるのでやってみました。

該当セッションのスライドはこちらです。(Google Drive)
[既存アプリにFlutterで新機能を追加しよう](https://t.co/ewmkphMOqP?amp=1)

# 今回のゴール

[公式のAdd-to-appの解説](https://flutter.dev/docs/development/add-to-app/a

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜WorkManager編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`WorkManager`編です

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`WorkManager`ってなに?
“`
WorkManager API を使用すると、アプリが終了したりデバイスが再起動したりしても
実行することが要求される延期可能な非同期タスクのスケジュールを簡単に設定できます。
“`

です!

# `WorkManager`の主な機能
## 機能
* API 14 までの下位互換性
* API 23 以上が搭載されたデバイスでは `JobScheduler` を使用
*

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜Room編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`Room`編です

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`Room`ってなに?
公式の説明

“`
Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、
データベースへのより安定したアクセスを可能にし、
SQLite を最大限に活用できるようにします。
“`

です!

# `Room`を使う理由

* アプリ内ではオブジェクトを利用して、`SQLite`のデータベースにアクセスできる。
* コンパイル時にチェックができる

(`Sunflower`のリポジトリのトップペー

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜ViewModel編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`ViewModel`編です
[DataBinding編](https://qiita.com/apimama/items/87da362855a9ca74e167)、[LiveData編](https://qiita.com/apimama/items/7f53ddc9bbd9fdf305b8)などでも、
チラチラ出てきてはいましたが、見てみぬふりをしていました笑

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`ViewModel`ってなに?
公式の説明によると

* `ViewModel` は、`ライフサイ

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜LiveData編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを勧めてもらいました。

JetPackのライブラリのうち、今回は`LiveData`編です
[DataBinding編](https://qiita.com/apimama/items/87da362855a9ca74e167)からの続きです。

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそもLiveDataってなに?
公式の説明によると

* `LiveData`は監視可能なデータホルダー クラス
* 通常の監視と異なるのは**ライフサイクル**に応じた監視が可能
* ライフサイクルが**アクティブ**なオブザーバーのみを更新する
* ライフサイクルの状態が`ST

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜DataBinding編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`DataBinding`編です

尚、引用しているソースは明記しているところ以外は、全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用
* `Data binding`はサポートライブラリなので、`Android 4.0`(API レベル 14)以降で利用可能
* `Android Plugin for Gradle`の`1.5.0`以降でサポートされているが、なるべく最新を使用したほうがいい(らしい)

# DataBinding を利用するのに必要なこと
* ビルド環境設定
* レイアウトファイルを変更
* 購読処理の実施(LiveDataとの連携)

# 準備
`Build.gradle`ファイルで`Data Binding`の機能を有効にします
`Sunflower`では`app/build.gradle`に記載して

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜Navigation編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`Navigation`編です

尚、引用しているソースは明記しているところ以外は、全て`Sunflower`のリポジトリのものです。 

# 環境
* Android Studioは`3.3`以上が必要
* 確認時は`3.6.2`を使用

# Navgation を利用するのに必要なこと
大きく分けて3つ必要です
1. 準備(依存関係の記載)
1. レイアウトファイルにナビゲーションを使うことを記載する
3. ナビゲーション グラフのファイルを作る

# 準備

## 依存関係の記載

* 公式によると、`build.gradle`に以下の4つの依存関係を記載する必要があります。
* Java language implementation
* Kotlin
* Dynamic Feature Module Support
* Testing Navigation

### 公式の

元記事を表示

新卒プログラマの学習ログ 〜 其の一 〜

#本記事の目的
基本的には自分用の学習ログとして投稿していきます。

そのため、誤った解釈や方法をとっている可能性があることは否めません。
ご指摘いただければ修正し、今後の学びで気づくことがあれば随時加筆していきます。

#投稿者の背景
今年度より外資系IT企業で新卒エンジニアとしてのキャリアをスタートしました。

With Covid-19で新卒入社から完全リモート勤務という、 この状況下でプログラマとして成長をしていけるように色んなことを模索しています。

大学でもプログラミングは学んできましたが、実務経験は皆無なのでまだまだわからないことだらけです。

業務に関わる内容や取り組みはもちろんここに書くことはできませんが、自学的に取り組んだことを今後書き留めて行きたいと思います。

#Android アプリ開発
アンドロイドでアプリを開発するのであれば、Android StudioはIDEとして優秀なツールです。

その基礎構築としてGoogleが提供しているCodelabsは非常に有効な学習ツールとなるでしょう。
(https://codelabs.developers.goog

元記事を表示

Android CameraX+ML Kitで顔検出

# はじめに
この記事ではCameraXの画像解析ユースケースとML kitの顔検出APIを連携した技術ついて解説します。

この記事を読むと、画像解析によって検出した顔の位置情報をもとに、どのようにして画面に顔枠を表示したらよいか理解できるようになります。

![CameraX+XMKit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143712/8623e8d3-b96d-0810-b31a-79b7b611cca2.png)

顔枠をオーバーレイ(後述)に出力する仕様についてはML Kitのサンプルコードに基に調査した内容となっています。

# CameraX 画像解析ユースケースとは
画像解析ユースケースを使用すると、カメラをファインダーから覗いているときに、顔を検出したり、物(ヤカンや鍋とか)、バーコードなど検出できるようになります。

どのようにして画像解析が行われるか?について解説します。

まず、ファインダーに映ってる映像をもとに次々と画像を作って、画像アナライザーに渡します。

元記事を表示

ちょっと凝ったローディングダイアログ作った

# 作ったもの

“`xml
android:indeterminateTint=”@color/teal_200″
“`
だと以下のようにちょっと白く欠けたようになるので、白い部分が消えるようにしてみた。

# コード

LoadingDialogFragment

“`kotlin
package com.example.sampleapp.ui

import android.app.Dialog
import android.os.Bundle

元記事を表示

Android: layout_marginHorizontal と paddingHorizontal は積極的に使おう

# 結論

Android XML のレイアウトで左右に同じサイズの margin, padding を設定するときには、個別にパラメーターを設定するのではなく `layout_marginHorizontal` `paddingHorizontal` を使いましょう。

“`XML



“`

`android:paddingHorizontal=”16dp”` は `android:paddingLeft=”16dp”` と `android:paddingRight=”16dp”` を指定したものと同じ意味となります。

上下の margin, padding の場合は `layout_marginVertical` `paddingVertical` を使います。

# ~Hori

元記事を表示

Maven Publish PluginでAndroid Libraryのソースコードを公開する

# 概要
[Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html) で Android Library のソースコードを添付する方法です。

# build.gradle.kts(差分のみ)
以下、既に Maven Publish Plugin を利用している場合向けの、差分のみを示したコードです。
※ 各値は自身の環境に合わせてください

“`kotlin:build.gradle.kts
tasks {
val androidSourcesJar by creating(Jar::class) {
archiveClassifier.set(“sources”)
from(android.sourceSets[“main”].java.srcDirs)
}
}

afterEvaluate {
publishing {
publications {
create

元記事を表示

ConstraintLayout入門その2 – センタリング、あるいはbias

ConstraintLayoutを使用するための設定については、[前回記事](https://qiita.com/yamadacsa/items/a4fcf4de9982111cdb7c)をご覧ください。

## ConstraintLayoutのセンタリング

FrameLayoutの子Viewを親Viewの中央に置くときは “`android:layout_gravity“` に “`center_horizontal“`, “`center_vertical“` などの値を設定します。RelativeLayoutの子Viewを親Viewの中央に置くときは “`android:layout_centerHorizontal“`, “`android:layout_centerVertical“` などの値を “`”true”“` に設定します。
これらに対し、ConstraintLayoutでのセンタリングは、「Viewの上下端もしくは左右端を同時に制約する」、という、いささか手間のかかる方式を用います。

“`xml:activity_main.xml

元記事を表示

OTHERカテゴリの最新記事