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

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

Androidアプリ開発者としてのキックオフ 「Androidアプリ開発の教科書」を読んで

これまでにもちょっとだけAndroidアプリの開発に携わったことがあるのですが、散逸的な知識しか身に着いていないという反省点がありました。
幸い仕事の方も少し落ち着いているので、良い機会として基礎から体系的な学習に取り組んでみることにしました。

手始めに「[Androidアプリ開発の教科書(第2版)](https://www.shoeisha.co.jp/book/detail/9784798152028)」という書籍を手に取ったのですが、これがかなり良かったので内容について簡単にレビューしてみたいと思います。
これからAndroidネイティブアプリの開発をやってみたいという方の参考になれば幸いです。

# 書籍の概要
2019年7月に第1版が刊行されたのち、2021年4月に第2版が出版されました。
バージョンの差が大きいことでおなじみのAndroidStudioですが、割と新しい本ということで自分が読んだ2021年8月の時点では特にコンパイルエラー等なくサクサク進めることができました。
1章から17章まで、各章のテーマに沿ったアプリをハンズオン形式で開発していく構成となっています。

元記事を表示

USB接続した実機を用いてAndroid Studioからのデバッグ

## 環境

Android Studio: Arctic Fox 2021.3.1

## 実機(スマホ等)での事前設定

– 設定 > システム > 端末情報 を選択
– ビルド番号を7回タップする。これで、開発者向けオプションが有効となる
– 設定 > システム > 開発者向けオプション を選択
– USBデバッグ を有効にする

– 注
– 設定メニュー構成は、機種によるかも

## デバッグ

– PCと実機(スマホ等)をUSBケーブルで接続
– Android Studioでプロジェクトを開く
– Run > Debug

元記事を表示

AndroidManifest.xml上書きできずAPK生成に失敗する場合の解消方法

## 環境

* Android Studio: Arctic Fox 2021.3.1
* gradle 7.0.2

## 現象

プロジェクトのビルドや実行において、以下のようなエラーがでて失敗する。

“`
Zip file ‘…\app\build\outputs\apk\debug\app-debug.apk’ already contains entry ‘AndroidManifest.xml’, cannot overwrite
“`

## 原因

– 依存ライブラリの中にAndroidManifest.xmlが含まれている場合、そのAndroidManifest.xmlが先にAPKにコピーされる
– その後、本プロジェクトのAndroidManifest.xmlをコピーしようとするが、既に存在するためエラーとなる
– [参考] Android Gradle プラグイン 7系で使用されているzipflingerというライブラリで上書きチェックが厳密にされるようになったため、問題が顕在化した模様
– https://android.googlesource

元記事を表示

WSLとAndroidエミューレーターを共存させる。

## 導入
一般的なAndroidエミュレーターはHyper-Vを無効しないと使えないのに対して
WSLはHyper-Vを要求するのでどうしても共存は厳しいように見えたが。

物凄くよさげなものを見つけたので紹介する。
**なお宗教上の理由でBluestacksは使えないという方はここでブラウザバックしてもok。**
## 結論
**BlueStacks Hyper-V版**というのがあるらしい、というかあった。
最低限の動作環境やダウンロードリンクは下から。
[BlueStacks Hyper-V版を利用する方法 – bluestack.com](https://support.bluestacks.com/hc/ja/articles/360041390952-BlueStacks-Hyper-V%E7%89%88%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

これでAndroidエミュレーターとWSLの共存が可能になった。

以下は GentooWSL2 と Bluestacks(Hyper-V)

元記事を表示

タップ時のripple(波紋)エフェクトがうまく表示されない

## 経緯

透過度を設定したViewをタップした際にエフェクトを表示したかったのですが、なぜだかうまくいきません。薄いような、またそもそも出ていなかったり。

なので試してみました。

## 結論
背景に対してmaskを指定すれば解決、でした。

“`

“`

## サンプル

下みたいな画面を作成して検証してみました。

![Screenshot_1630748499.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773816/3e91091c-02eb-fca6-9e95-c7094cfdbe93.png)

こんな感じの。(MainActivityは割愛)

“` activity_main.xml

【Android】Google Play Consoleで広告表示設定の変更をする

左メニューの「ポリシー」→「アプリのコンテンツ」

「広告」から現在の広告表示情報を変更
![スクリーンショット 2021-09-04 15.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f50ba1c7-dbb3-b65f-3a4a-d4e5180af289.png)

元記事を表示

【Realm】relationship と insert

![realm-java 10.8.0](https://img.shields.io/badge/realm–java-10.8.0-6E60F9)

`RealmObject` 派生オブジェクトが他の `RealmObject` 派生オブジェクトの参照を持つ場合、
参照元のオブジェクトを insert (もしくは update)すると参照先のオブジェクトも insert(update)される。

例えば次のようなクラスが定義されている場合を考える。

“`plantuml
class From extends RealmObject {
@PrimaryKey id
name
}
class To extends RealmObject {
@PrimaryKey id
name
}

From o- To
“`

“`Kotlin
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.wh

元記事を表示

スマートウォッチでタブレット上のビデオプレーヤーを制御できる、ビデオ再生の分散デモ

# ビデオ再生制御シナリオ
最近では、ユーザーはスマートデバイスでビデオを見ることが多いですが、次のような多くの課題に直面しています。

– ビデオプレーヤーを制御するには、大画面デバイスを手に持つ必要
– ビデオの再生中はデバイス上で他のタスクを動作できない

これらの課題を解決するには、以下の解決策を提案します。

– 軽量のデバイス(スマートウォッチなど)をリモコンとして使用し、大画面デバイスでビデオプレーヤーを操作する 。
– マルチコラボレーション API を使用してHarmonyOSアプリを開発し、クロスデバイスをデプロイ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50470/5929d0a9-220c-1c42-d054-eed198071187.png)
#Harmony OSはビデオ再生制御シナリオをどのように解決するか
Harmony OS がサポートするマルチデバイスコラボレーションは次の通リです。
![image.png](https://qiita-ima

元記事を表示

ToolbarのonCreateOptionsMenu()がFragmentから呼ばれないときの対処法

一部のFragmentでのみ、とあるメニューを表示したかったのですが、メニューのvisiblityをうまくコントロールできず困りました。

というのも、ActivityからはonCreateOptionsMenu()やonPrepareOptionsMenu()が呼べるのに、Fragmentからは呼べませんでした。

すごくシンプルなのですが、

“`kotlin:HogeFragment.kt
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setHasOptionsMenu(true)
(略)
}
“`

これだけでした。
setHasPotionsMenu(true)を呼べば、onPrepareOptionsMenu()やonCreateOptionsMenu()も呼ばれます。

“`xml

元記事を表示

【Android】Android 12対応をする前にplay-services-analyticsのバージョンを確認しよう

## 結論
v17.0.1以上に上げればOK

“`gradle:build.gradle
com.google.android.gms:play-services-analytics:17.0.1
“`
https://developers.google.com/android/guides/releases#august_19_2021
>The latest update to the Analytics library includes the following change:
>・Fixed issue where library could not be built with Android 12 as its target.

## 何が修正されたのか(何が悪さをしていたのか)
初期化時に呼ばれるクラス内にAndroid12から必須となった可変性フラグが宣言されていないPendingIntentがあった

“`java:Application
GoogleAnalytics.getInstance(requireContext())
“`

“`log:lo

元記事を表示

aabをUSB経由で実機にインストールする方法

adbでapkをインストールするように、開発中のアプリのaabをインストールする方法を紹介します。

基本的には[公式ドキュメント](https://developer.android.com/studio/command-line/bundletool)のとおりです。

# 手順
* 以下からbundletoolをダウンロードし、/tmp/以下に保存します。
https://github.com/google/bundletool/releases
* 以下のコマンドでaabを複数のapkに分解します

“`
java -jar /tmp/bundletool-all-1.8.0.jar build-apks –bundle=release.aab –output=/tmp/signed.apks \
–ks={キーストアへのフルパス} \
–ks-key-alias={keyAliasで指定する値} \
–ks-pass=’pass:{storePasswordで指定する値}’ \
–key-pass=’pass:{keyPasswordで指定する値}’

元記事を表示

【Flutter】全画面を削除し遷移する

## 何度か画面遷移をした後にトップレベルの画面に戻す

“`dart
Navigator.of(context).pushNamedAndRemoveUntil(‘/page’, (_) => false,);
“`

### メソッド

条件を満たすまで画面を破棄し遷移するため, 条件部分でfalseを返している.

“`dart
pushNamedAndRemoveUntil(
”, //page
(_) => false, //条件
)
“`

参考 https://api.flutter.dev/flutter/widgets/Navigator/pushNamedAndRemoveUntil.html

元記事を表示

Android アクセシビリティ

#はじめに
近年、日本でも多様性が求められる世の中になっており,アプリ開発においてもアクセシビリティを意識する必要があると思います。本記事ではAndroidアプリに関するアクセシビリティについてご紹介します。

# 目次
* アクセシビリティとは
* Android
– フォントサイズ
– 表示サイズ
– TalkBack

#アクセシビリティとは
障害を持つユーザーが情報を利用できるようにすることだけではありません。
ユーザーの能力や状況に関係なく、すべての人が情報を利用できるようにすることです。
アクセシビリティを念頭に置いてアプリを設計するということは、
シンプルさと知覚可能性を優先し、すべての設計上の決定を調べて、
さまざまな能力を持つユーザーやさまざまな方法で、
デバイスを操作するユーザーを除外しないようにすることを意味します。

# フォントサイズ
Android上のフォントサイズを調整して、画面上のアイテムのサイズを変更できます。

確認方法
設定→ユーザー補助→フォントサイズ→小・デフォルト・大・最大 から選択

|デフォルト | 最大|
| :-: | :-

元記事を表示

[Android] DataBindingでソースコードを減らしたい

# Fragment側の記述量を減らしたい

**Fragment側の記述量は多くなりがちです。
そして記述量が多いと可読性が落ちるでしょう。**
そんな時は**DataBinding**が役に立ちます。

今回作成するサンプルアプリでは以下の記述量で済みます。
※ DataBindingを使用するためのレイアウトをinflateする記述は別途必要です。

“`DataBindingFragment.kt
// テキストフィールドに入力された文字を監視し、ViewModelに伝達する
mBinding.myTextFiled.addTextChangedListener {
mBinding.viewModel?.updateText(it.toString())
}
“`

## どんなアプリができるの?

10文字以上入力すると、画像が表示され、「10文字以上入力してね!」の文字が非表示になります。
また入力文字数が表示され、10文字以上の入力で緑色、10文字未満では赤色に着色します。
こんなアプリができます。

![2021-09

元記事を表示

Flutter: Android studioでFirebaseをセットアップする最低限の手順(Android&IOS)

###この記事について
この記事はFlutterでAndroidとIOSのアプリを作る際、Firebaseを使用するときのセットアップ方法についての記事です。
実装するたびに動画の教材を見ており時間が掛かってしまうため(特にIOS)、一連の作業を箇条書きにしております。
セットアップのための最低限やることを書いた記事のため、Firebaseの機能の実装等は記載していません。また、Firebaseプロジェクトの作成は省略しております。

###開発環境

“`
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 2.6.0-1.0.pre.150, on macOS 11.5.2 20G95 darwin-x64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode –

元記事を表示

Android apk old version download

https://apkpure.com/

元記事を表示

ウィジェット一覧を作る ~ホームアプリ(ランチャーアプリ)の作り方~

ホームアプリ(ランチャーアプリ)の作り方シリーズ
今回は端末にインストールされているウィジェット一覧を表示させてみます。

– [超シンプルなホームアプリを作る ~ホームアプリ(ランチャーアプリ)の作り方~](https://qiita.com/ryo_mm2d/items/00326b0d8f088975fa0e)
– [システム壁紙を制御する ~ホームアプリ(ランチャーアプリ)の作り方~](https://qiita.com/ryo_mm2d/items/02bfab5f130b8d17124b)
– [ウィジェット一覧を作る ~ホームアプリ(ランチャーアプリ)の作り方~](https://qiita.com/ryo_mm2d/items/19bd3dce898821920036) ←イマココ

※シリーズが続くとは言っていない

|||
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/437c15b5-7c93-6d19-5989-6c084109189c.png)|

元記事を表示

FlutterでAndroidEmulatorに won’t run without Google Play services と表示されGoogleMapが表示できない

#■前提
Flutterの開発中、AndroidEmulator上に地図を出したいと思い、
GoogleMapを表示するサンプルを試しました。
https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#0

Android用のキーを取得して、AndroidManifestに設定しと進めていったところ、
無事実機ではGoogleMapが表示されることを確認。

ところがEmulator上で表示しようとしたところ、
googlemap_sample won’t run without Google Play services,
which are not supported by your device.
と表示され地図が出ません。

AndroidStudioのログには
W/GooglePlayServicesUtil( 3773): Google Play Store is missing.
W/Gralloc4( 3773): allocator 3.x is not supported
というような

元記事を表示

ListViewでCheckedTextViewを実装したい

前回、ListViewでCheckedTextViewを実装する方法をまとめました。
しかしその後の調査で、前回まとめた方法がツッコミどころ満載の方法だったということが分かりました。
これ以上セルフツッコミはしたくない…!ということで再びListViewについてまとめます。

前回の記事は[こちら](https://qiita.com/satona-oinuma/items/b033ffcc346dc167f749)です。
CheckedTextViewの基本と、ListViewへのツッコミ力が得られるかと思います。

そして、前回実装したListViewにセルフツッコミした部分は以下の2点です。
1. ListViewの特徴であるViewの再利用ができていない
2. 要素が画面外に出た時に初期化されてしまう

今回は、前回まとめたソースコードを元に、実装を行います。

◯実行環境
Android Studio:4.2.2
Kotlin:1.3.72

##1. ListViewの特徴であるviewの再利用を実装

実はListViewには、convertViewという画面外に出

元記事を表示

AndroidのUI開発にJetpack Composeを使ってみる(1)

# 前提条件
– Android Studio Arctic Fox以降
– Kotlinの基本的文法

# 導入
Android Studioを開いて**New Project** -> **Empty Compose Activity**を選択しましょう。
ただし古いバージョンのAndroid Studioを使っている場合は該当部分が存在しません。
![スクリーンショット 2021-08-31 20.17.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592867/ffe45768-c19c-4b15-d838-4746503d5757.png)

アプリケーションの情報を決めると以下のようなテンプレートコードが生成されます。(2021/8/31現在)

“`kotlin:MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle

元記事を表示

OTHERカテゴリの最新記事