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

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

Android StudioにおけるBuild Outputの文字化けを解消

#状況
Windows10上のAndroid Studio 3.6.1でアプリを開発している。文字列やコメントに日本語を含むコードも問題なくビルド・実行できる。
しかしBuild Output Windowのエラーメッセージが文字化けして読めない。

![fig1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284841/159908c1-1c06-e20b-2703-5dc01722bd43.jpeg)

#解決方法
「メニュー>Help>Edit Custom VM Options..」を選択する。

![fig2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284841/433de0f6-c47c-35f6-eeb0-7ccd9e778c5d.jpeg)

表示されたファイルに「-Dfile.encoding=UTF-8」を追加する。
![fig3.jpg](https://qiita-image-store

元記事を表示

flutter + firebaseで本番環境と開発環境を切り替える

# この記事ですること
* デバック実行とリリース実行でfirebaseの環境を切り替える
* デバック実行とリリース実行でflutterの環境を切り替える

# しないこと
* 別アプリ化
* ステージング環境の構築

# 対象
個人開発者など、複雑な環境構築を必要としないけど、最低限、本番と開発環境を分けたい人

# 複雑に環境を分けたい人は
以下の記事が参考になります。
[flutterで本番/ステージング/開発を切り替える – Qiita](https://qiita.com/ko2ic/items/53f97bb7c28632268b5a)
[Flutterで環境ごとにビルド設定を切り替える — iOS編](https://medium.com/flutter-jp/flavor-b952f2d05b5d)
[【iOS】FlutterでFlavorを使って環境ごとに切り替えてビルドする(debug/stg/prod)](https://qiita.com/skycat_me/items/0a0f5e3982fbfca14444)

# flutterのcreate
def

元記事を表示

Android + C++ で wav 音声再生するための Oboe ライブラリのメモ

# 背景

* Android で手っ取り早く C++ で wav 音声を再生したい
* Android Vulkan で compute shader で STFT 処理とか spatial audio 処理した音声データを再生したい
* Vulkan と一緒に使いたいので, Android 8 以降対応でよい.

## Native audio library

AAduio(Android 8.0 or later) と OpenSLES がありますが, どちらも低レイヤーなので, wav をお手軽再生とかはできません.

https://developer.android.com/ndk/guides/audio

## 既存ライブラリ

手っ取り早く Android C++ で wav 再生は SoLoud があります.

https://sol.gfxile.net/soloud/

クロスプラットフォームでよいのですが, Android はあまりメンテされていないようで, CMake 用の設定がなかったり, SLES 実装だったり, logcat になぜか多量の deb

元記事を表示

AndroidStudioのScratch Fileでビルドせずにプログラムを実行する方法

##■概要
ちょっとした演算や勉強、作成した関数の結果などを調べたいときにアプリケーション全体を作成せずに、軽量な方法でKotlinコードを作成および実行できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252283/41b5d06c-a178-c473-c70d-dbb639297db9.png)

##■特徴
– 軽い!!!
– AndroidStudioのエディタと基本同等機能が使える
– 入力保管
– 動的なエラー表示
– 関数ジャンプ
– ローカルヒストリーなどなど
– プロジェクト内のクラス、関数の利用
– 全プロジェクトで共通のScratch Fileを使用可能
– プロジェクトに含めなくてよいのでGitなどで他者と共有する心配がない

##■使い方

**・ショートカット**
【Mac】command + shift + N
【Windows】Ctrl + Alt + Shift + Insert<

kotlinx.android.parcel.Parcelizeのimportでエラーになる

“` kotlin
import kotlinx.android.parcel.Parcelize
“`
これがparcelの時点でエラーになる

トップレベルのbuild.gradleで `classpath “org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version”` を dependenciesに追加する

“` build.gradle
buildscript {
ext.kotlin_version = ‘1.3.70’
repositories {
google()
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:3.6.1’
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”
// ↓こいつを追加する

Android NDK + C++14 設定 cmake で no member named `make_unique` in namespace `std` エラーなどが出る

## 背景

C++14 を要求されるコードを

“`
set(CMAKE_CXX_STANDARD 14)
“`

と設定しても,

“`
no member named `make_unique` in namespace `std`
“`

などで, make_unique 周りでコンパイルがこける.

## 原因

たぶんなにか他の add_subdirectory などで追加している third party library が, CXX flags に直接 `-std=c++11` など他の C++ バージョンを指定してしまっている可能性が高いです.

`CMAKE_MAKEFILE_VERBOSE=On` を cmake bootstrap に追加するなどして, コマンドラインで適切に C++14 モードになっているか確認してみましょう.

“`
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
“`

として, 厳格に

Android Palette APIで画像から色を抽出する(ステータスバーの色を画像から変える)

Palette APIを使うとBitmapから簡単に色情報を取得することができるようです。
https://developer.android.com/training/material/palette-colors?hl=ja

公式でも書かれていますが、アルバムカバー画像から色を抽出してレイアウトカラーにしたり、今回のようにステータスバーを変更したりなど、ユーザーに視覚的に印象を与える場面で効果的なようです。

で、実際にどんな感じになるのかを試してみたのですが、とても簡単に使うことができました。

実際に書いてみたサンプルの挙動がこんな感じです。リスト表示されているユーザーを選択して詳細画面へいくと、ヘッダーが表示されてステータスバーがそのヘッダー画像から抽出された色に変更されるような感じです。

画面の色味が統一されてすごくいい感じですね!

レジの店員を呼ぶアプリをつくた android cordova ハイブリッドアプリ

## 成果物
https://play.google.com/store/apps/details?id=com.itsumen.regi&hl=ja

## リポジトリ
https://github.com/yuzuru2/regi_apuri_sozai

## 環境

– node.js 12.14.0
– cordova 9.0.0
– java 1.8.0

※javaとandroidのsdkは各自インスコしてパスを通しておいてください。

## コマンド

“`bash
$ npm i -g cordova
$ cordova create sample com.example.sample sample
$ cd sample
$ cordova platform add android
$ cordova plugin add cordova-plugin-volume-control
$ rm -rf www/*
$ cd www
$ git clone https://github.com/yuzuru2/regi_apuri_sozai.git .
$ cd .

Mac上のファイルにAndroidからアクセスするには

#Mac上のファイルにAndroidからアクセスしたかった話

ことの発端はHTMLであるページを作っていた時の話。

当然PCでHTMLファイルを記述していたわけだが、そういや公開したらスマホでも見るかもしれないな(というか多分そっちのほうが多いだろう)と思い、(私は手持ちの端末がAndroidなので)ファイル共有して開こうと思った…

が!

私は保守や作成時にわかりやすいよう、ファイル(特にCSS)を大量に分割して記述することが多く、ファイル転送がめんどくさい!
(いや、がんばれ)

ということで、手持ちの環境でファイル共有ができないかと模索してみた。

##FTP
無知な私が最初に思いついたのはFTP。スマホのファイルマネージャーに簡単にFTPが作れる物があったからだ。

FTPとは、File Transfer Protocol、ファイル転送プロトコルのこと。
プロトコルっていうのは、Wikiによれば

>プロトコルまたはプロトコールとは、複数の者が対象となる事項を確実に実行するための手順について定めたもの。

>もともとは「人間同士のやりとり」だけに関する用語であった。戦間期

コピペでできる一部の文字列でクリックイベントを取得する方法(android)

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367893/f31ff071-407e-6046-16b6-1a5b43ffbf03.gif)

androidで長いTextViewがあって、一部だけハイパーリンクにするのめちゃくちゃめんどくさいですよね。
ハイパーリンクというか、クリックイベントをとりたかったのですがだいぶめんどくさかったです。

なのでコピペでできるようにしました。
ついでにHTMLタグにも対応できるカスタムtextviewを作りました。

まずはそれを表示するクラスから

“`kotlin:HtmlTextActivity.kt

class HtmlTextActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

FragmentPagerAdapterのページ切り替えを無効にする方法

FragmentPagerAdapterでスワイプの無効/有効を切り替えたかったので実装をメモ。
ViewPagerでは実装できるけどFragmentPagerAdapterでは難しいみたい。
https://stackoverflow.com/questions/41656902/disable-swipe-in-fragmentpageradapter-android

結果、無効というかタブの切り替えは行われないような処理が書けた。
(スワイプしようとしても弾性をもって勝手に元の位置に戻る系の。これはこれでUIとしてありかなと。)
以下、実装。

“`kotlin

private lateinit var listener:ViewPager.SimpleOnPageChangeListener
private lateinit var viewPager:ViewPager

:

//スワイプを無効にする
listener = object : ViewPager.SimpleOnPageChangeListener() {
ov

Androidアプリのサンプルプロジェクト体験

# 目次
– Androidアプリ体験に必要なもの
– Android Studio IDEのインストール
– Android Studioの追加パッケージのインストール
– サンプルプロジェクトの作成

##Androidアプリ体験に必要なもの
当サンプルは実際のアンドロイドスマホで試す為、必要なものとして以下となります。

– Android Studio IDE
– アンドロイドスマホ
– USBケーブル

##Android Studio IDEのインストール
インストールガイドは以下のリンクにて、ご参照ください。
https://qiita.com/nayylin/items/d0a02aab68a3170f5f26

##Android Studioの追加パッケージのインストール
– まずは、Android Studioを開き、「Configure」をクリックし、「SDK Manager」を選択する。
![0018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/b87

fastlaneを使って Internal App SharingにAABファイルをアップロードしてSlackにダウンロードリンクを飛ばす

## 事前準備
– fastlaneのバージョン`2.139.0以上`を使えるようにする
– Internal App Sharingを使ってアプリの配布とダウンロードができるようにしておく
– こちらのスライドを見れば設定やそもそもInternal App Sharingって何?というのは解決できると思います [Internal app sharing 完全に理解した](https://speakerdeck.com/syarihu/internal-app-sharing-wan-quan-nili-jie-sita)
– Google Play Developer APIの[Publishing API](https://developer.android.com/google/play/developer-api?hl=ja#publishing_api_overview)を使えるようにしておく
– こちらの記事でやり方は紹介されているので参考にしてください https://qiita.com/itog/items/f382a7cc4a38bd079aab

【和訳】Jetpack Navigation(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)

[Android Dev Summit 2019
Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.](https://codelabs.developers.google.com/ads19/)

[Jetpack Navigation](https://codelabs.developers.google.com/codelabs/android-navigation/index.html?index=..%2F..ads19)の日本語訳

# 1.はじめに
[ナビゲーションアーキテクチャコンポーネント](http://d.android.com/arch/navigation)は、ナビゲーションの実装を簡素化すると同時に、アプリのナビゲーションフローを視覚化するのにも役立ちます。 ライブラリには、次のような多くの利点があります。

– フラグメントトランザクションの自動処理
– デフォルトで進むと戻るの適切な処理
– アニメーションと遷移のデフォルト動作
– ファーストクラスの

Expecting android:screenOrientation=“unspecified”…の対処法

## 困ったこと
Andsroid3.6+から、AndsroidManifestファイル内で下記のように、Activityの向きを固定に指定しているとワーニングが出るようになりました。これは、Googleより「ユーザの(画面の向きを変えれる)選択肢を狭めないように横向きにもアプリを対応させましょうね。」というメッセージなわけでございます。

## 対処法① アプリを横向き対応する
ユーザの利便性を追求するのであれば横向きもサポートするほうが良いのは当然です。
なお、ワーニングの指示通り下記のどちらかを指定すれば消えます。

“`xml

“`

|パラメータ名|説明|
|—|—|
| unspecified | デフォルト値。システムが画面の向きを選択します。システムが使用するポリシー、つまり特定の状況における選択は、端末により異なる場合があります。 |
| fullSensor

シワ(Sign in with Apple) 対応

# Sign in with Appleとは
Apple ID を利用したサインイン方法。
サードパーティーログインを使用しているアプリは2020/04までにSign in with Appleに対応する様に義務化した。
> App Storeに提出されるすべての新しいAppやアップデートは、2020年4月30日までにこれらのガイドラインに従う必要があります。
引用元:https://developer.apple.com/jp/news/?id=03042020d

そうです。いつものAppleの無茶振りです。
対応しないとリジェクトされてしまう為、仕方なく実装する事に、、
まずは仕様から

# アプリへの公開情報

アプリに公開される情報は大きく分けて以下の2つです。

* 名前
* メールアドレス
* 公開メールアドレス
* プライベートメールアドレス

これらの値はSign in with Apple新規登録時かユーザーがアプリと紐付け解除を行った後の初回のみ設定する事が出来ます。

#### 名前
アプリに連携する名前はアプリ毎にユーザーが設定することができます。
デフォ

既存のプロジェクトでJetpack Composeを動かす方法について(2020/03/15時点)

モチベーションとしてはDroidKaigi App 2020でちょっと動かして見たかったんですが、そのうちすぐ状況が変わるとは思いますが、結構ハマるのでメモしています。
見た後に始めれば、ハマらずにすっと動かせるのではないかと思ったので、公開しています。

## Compose導入の現状の問題点と解決策

### Android Gradle Plugin(AGP) 4.1-alpha01でCrashlyticsが対応していない
Composeを使うにはAGPが4.1-alphaか4.0-alphaでないといけないです。
Composeというよりは、AGP 4.1-alpha01の問題で、CrashlyticsのGradle Pluginがまだ対応できていなくてビルドできないので、一旦外します。ここはAGPの問題なので、4.0のalphaなどを使えば一応通るはずです。
https://issuetracker.google.com/issues/150397894
変更ログ
https://github.com/DroidKaigi/conference-app-2020/commit

[Android]Firebase Performance Monitoringを導入する

タイトル通りFirebase Performance Monitoringを実装するだけの記事。

## 前提

Firebaseの導入は完了している事。
まだの場合は[Firebaseの導入についての公式の記事](https://firebase.google.com/docs/android/setup?hl=ja)を参照。

## 実装

プロジェクトレベルの`build.gradle`に以下を書き足す。

“`gradle
buildscript {
:
dependencies {
:
classpath ‘com.google.firebase:perf-plugin:1.3.1’
}
}
“`

アプリレベルの`build.gradle`に以下を書き足す。

“`gradle
:
dependencies {
:
implementation ‘com.google.firebase:firebase-perf:19.0.5’
}
“`

既にprotobufを利用している場合、二重インポート

[Android]in-app updates APIの検証方法

本記事では表題の通り、in-app updates APIのテスト方法のみ説明する。
テスト方法がよく分からず試行錯誤した結果なので、もっと良い方法があるかも知れない。

実装方法については以下の記事がとても良いので参照されたい。
[Android in-app Updates API 解説と雑感 – Qiita](https://qiita.com/consomme72/items/bcda09cf36e4fc6d31b7)
なお当該記事の`An update has just been downloaded.`はサンプルプログラムのままになっており、うっかりそのまま使っちゃうと「あぁ〜」となるので、いい感じに変更されると良い。

## 手順

### 準備

in-app updates API対応バージョンのapkまたはaabを用意する。
バージョンコード/バージョン名はリリース済みのものより上である必要がある。

### テスターの登録

Playコンソールにログインする。
対象のアプリをクリックする。
リリース管理→アプリのリリースに遷移する。
「内部テスト版」の「管理」をク

Android Activity タスクとスタック

アクティビティのタスクとスタックについてまとめます。間違っていたらご指摘のほどよろしくお願いいたします。
## タスク
タスクは複数のアクティビティのまとまりのことです。公式ドキュメント[^2]によると、

> タスクは、ユーザーが新しいタスクを開始したとき、またはホームボタンを使用してホーム画面に移動したときに、「バックグラウンド」に移動できるまとまったユニットです。

です。端末のバックキーの反対側にある □ ボタンを押したら出てくる[最近]画面で、タスクの一覧を確認することができます。

アクティビティAがアクティビティBを起動すると、基本的には、それらのアクティビティはひとつのタスクに所属します。(後述しますが、別のタスクで起動することもできます。)
![activities_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247791/92a2bbfb-89c0-17fe-98a3-f7a89b15fd33.png)
注意したいのが、タスクは一つのアプリ内のアクティビティをまとめたものとは限