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

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

Kotlin Multiplatform Mobile がアルファ段階に移行したので、チュートリアルを試す

# 背景

最近、Kotlin Multiplatform Mobile(KMM)がアルファ段階に移行したようです。

[Kotlin Multiplatform Mobile がアルファ段階に移行 – Kotlin Blog | JetBrains](https://blog.jetbrains.com/ja/kotlin/2020/09/kotlin-multiplatform-mobile-goes-alpha-ja/)

KMM とは、JetBrains が提供するクロスプラットフォーム対応のモバイル開発用 SDK です。
Kotlin のマルチプラットフォーム対応能力を駆使し、モバイルアプリケーションの構築体験を可能な限り楽しく効率的にするように設計されたさまざまなツールや機能を含んでいます。

見ていて面白そうだったので、試しにチュートリアルをやってみました。
※2020 年 10 月時点の情報なので、今後のアップデートにより変わる可能性があります。

# 開発環境

開発環境は以下の通りです。

– Android Studio 4.1 RC 3 以降
– Xcode 1

元記事を表示

#3 Kotlin Koans Introduction/Default arguments 解説

# 1.はじめに

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

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

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

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

# 2-1.Default引数とnamed引数

[#2 Kotlin Koans Introduction/Named arguments 解説](https://qiita.com/drafts/7414e4e3a536026dc746/edit) の記事で説明しておりますので、ご覧ください。

# 2-2.toUpperCase()

右側の本文中に出てくる、toUpperCase()関数を[Kotlin公式リファレンス](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/)で見てみましょう。

> fun String.toUp

元記事を表示

#2 Kotlin Koans Introduction/Named arguments 解説

# 1.はじめに

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

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

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

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

# 2-1.Default引数とnamed引数

Default引数:デフォルトで値が指定されている引数

named引数:名前がついた引数

Default引数は関数を呼び出す際、引数に値を指定しなくても良い、
named引数は、引数が複数あるとき、関数の呼び出し側が引数の順序を気にせず値を渡せる、
といったメリットがあります。

[Default引数とnamed引数の詳細](https://kotlinlang.org/docs/reference/functions.html#default-arguments)(公式レファレンスの引用)

# 2-2.関数定義の略記

“`
fun join

元記事を表示

Quick Appの開発方法

# 前書き
日本ではQuick Appがあまり知られていません。しかし、Quick Appはすでに170ヶ国以上展開されています。本稿はQuick Appの特徴と開発手順を紹介するものです。

# Quick Appの概要
ユーザーがAndroid上で動かすサービスが主に2つあります。

* ネイティブアプリ(Androidアプリ)
* ウェブアプリ(ブラウザでウェブサイトを開く)

さらにQuick Appを加えれば、合計3つあります。

Quick Appの開発方法を述べる前に、ネイティブアプリとウェブアプリとQuick Appの特徴を比べてみたいです。

### ネイティブアプリの特徴

* インストールが必要
* デバイス機能が使用可能
* リリース時の審査あり
* iOS同時対応不可
* 開発言語(Java、Kotlin)
* APKの容量が大きい(数十MB以上のアプリが多く、100MBを超えるアプリも少なくない)

### ウェブアプリの特徴

* インストールが不要
* デバイス機能が使用不可
* リリース時の審査なし
* iOS同時対応可
* 開発言語(HTML、CSS

元記事を表示

じゃんけんアプリをFlutterに移植してみた

# はじめに
[iPhoneアプリ開発集中講座](https://amzn.to/30MZV95)にあるじゃんけんアプリをFlutterでもしも作ったらというお題で移植してみました。
なるべく同じアプリになるようにしました。

# 解説
コードは[github](https://github.com/FromF/flutter_janken)に公開してあります。
一部紹介させていただきます。

## じゃんけん画像
[iPhoneアプリ開発集中講座](https://amzn.to/30MZV95)内ではImageViewのimageプロパティーが初期はnilでじゃんけんをすると画像がセットされる作りでしたが、それをうまくできなかったのでWidgetを作って対応しました。

“`Dart
Widget image(String image) {
if (image.isEmpty) {
// 画像のファイル名がない場合には、Container()を返して何も表示しない
return Container();
} else {
// 指定された画像ファイ

元記事を表示

OpenAPI Generator でAndroid コードを自動生成する

# [The OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification) (OAS)
OAS はHTTP API の仕様を記述するためのフォーマットです。
主な内容は以下のように、

– OAS のバージョン番号
– 記述するAPI のバージョン番号、タイトルなどの情報
– サーバへの接続情報
– 各エンドポイントの情報

からなります。(より詳しい書き方は https://swagger.io/specification/ を参照)

“`openapi.yaml
openapi: 3.0.3
info:
version: 0.0.0
title: OpenAPI Generator test with Qiita API
servers:
– url: https://qiita.com/api/v2/
paths:
/users:
get:
parameters:
– …
responses:
200:

元記事を表示

Google Playの課金ポリシーの更新について

# Google Playの課金ポリシーの更新

## 1. どういうこと?

Epic GamesのFortniteがAppleやGoogleによって公開停止になった事件は記憶に新しいと思いますが、先日Googleからアプリ開発者にとって衝撃的な発表がなされました。

GooglePlayの課金ポリシーが厳格化され、GooglePlayで配信するアプリについてはGooglePlayの課金システムを利用することが必須であることが明確にされたようです。
課金ポリシーに違反するアプリは2021年9月30日までに対応することが必要になります。

* Listening to Developer Feedback to Improve Google Play
[https://android-developers.googleblog.com/](https://android-developers.googleblog.com/)

* デベロッパー プログラム ポリシー(プレビュー): お支払い
[https://support.google.com/googleplay/android

元記事を表示

【Unity】Androidネイティブコード呼び出し時の注意点

# 初めに
作成したゲームの動作がおかしく、調査した時に、Androidのネイティブコード周りで問題が発生していました。
バイブ処理の影響で正常に動作しなくなっていました。

# 引数の型について

ネイティブのコードを呼び出す際は、引数の型を正しい物にしないと、エラーが発生する可能性があります。

## 例)バイブの実行
Androidの`vibrate`を呼び出す例です。
引数には、long型の数字を指定する事が必要です。

“`
vibrator.Call(“vibrate”, 100);
“`
上記の場合、数字の型を指定していませんので、UnityのデフォルトのInt32になってしまい、バイブ実行時にエラーが発生してしまいます。

“`
long setNum2 = 100;
vibrator.Call(“vibrate”, setNum2);
“`
上記のように、long型の変数に格納して、呼び出すことで、正常に実行する事が出来ます。

# ネイティブコードの権限について
ネイティブコードの処理を実行するために、Androidのマニュフェストファイルに権限を追加する

元記事を表示

【Android / Java】ホストFragment(呼び出し元)にDialogFragmentからイベントをコールバックさせる

# はじめに
Android Studio(java) でアプリを開発していて、
「ダイアログのボタンクリックイベントをコールバックして呼び出し元のフラグメントで処理させたい」という場面がありました。
もう少し具体的に言うと、ダイアログでAPI通信+画面遷移の処理を実装したところスレッドが異なるためか画面遷移ができない、ということがありコールバックを実装しました。
こんな感じのエラーが出た “Android IllegalStateException: fragment not attached to activity“

そこでコールバックを利用して処理を実現できたので、その際学んだ内容を書きます。

# 作成したサンプルアプリの概要
アクティビティにボタンがあるフラグメントを表示し、ボタンを押すとダイアログを表示。ダイアログOKボタンを押すとボタンのテキストを変更する。
だけのシンプルなアプリ

1. フラグメントを表示
2. ボタンをクリックする

【LT】関係者は必読!2020年11月からはじまる新Google Play Consoleの変更点

LTのYouTube動画 (クリックで再生)
[](https://www.youtube.com/watch?v=dVJPre3Mo0k)

※以下は動画の内容を書き起こして一部編集したものです。

# はじめに

2020年11月2日で現在のGoogle Play Consoleは新版に差し替えられます。
新しいGoogle Play Consoleは2020年6月からベータ版として公開されているのですが、11月2日以降はすべてこちらに置き換えられます。
マテリアルデザインをベースとしたモダンなデザインになっています。

Unityで作ったAndroidアプリが覚えのないネットワークアクセス権限を要求してくる

# 前提
– Unity 2019.4.11f1 (LTS)

# 課題
– ネットワークにアクセスするような処理を書いたつもりがないのに、関係の権限が要求されます。
– `WWW`、`UnityWebRequest`、`HttpWebRequest`とかは使用していません。

# 要求された権限
– `android.permission.ACCESS_NETWORK_STATE`
– `android.permission.CHANGE_WIFI_MULTICAST_STATE`
– `android.permission.INTERNET`

※必要な権限として表示されるだけで、ユーザの許可が求められるわけではありません。

# 対処
– Package Manager で、不要なパッケージを削除したところ、要求されなくなりました。
– `Advertisement` ~ [Unity Ads](https://docs.unity3d.com/ja/current/Manual/UnityAds.html) (マニュアル)
– `Analytics Li

【Android】EditTextに指定文字のみ入力+文字数制限を行う

### 1. 指定文字のみ入力するフィルターをクラスで作成
例として、カタカナのみ入力できるようにする

“`Kotlin
class KatakanaInputFilter : InputFilter {
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int) =
“[^ァ-ヶ]”.toRegex().replace(source, “”)
}
“`

### 2. フィルターのセット
フィルターセット時、配列になっているので、ここで指定文字のみ入力+文字数制限のフィルターをセットする

“`Kotlin
edit_text.filters = arrayOf(KatakanaInputFilter(), InputFilter.LengthFilter(30))
“`

元記事を表示

サンドボックスゲームを作った

ゲーム開発ほぼ未経験ですが軽量ゲームエンジン **[Godot](https://godotengine.org/)** を使って開発し、**Google Play** にリリースするところまでやってみました。

**↓もしよければ遊んでみてください!↓**
[Google Play Store](https://play.google.com/store/apps/details?id=org.hideckies.landbox)
[amazon appstore](https://www.amazon.co.jp/dp/B08KQF2TX1/%20%20%20%20%20%20%20%20%20%20%20%20/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A\%20%20%20%20%20%20%20%20%20%20%20%20&dchild=1&keywords=sandbox&qid=1602038255&s=mobile-apps&sr=1-6)

![screenshot_2.jpg]

元記事を表示

頑張って理解する”Fragments: Rebuilding the Internals”

# はじめに
この記事は「[Fragments: Rebuilding the Internals](https://medium.com/androiddevelopers/fragments-rebuilding-the-internals-61913f8bf48e)」の内容を、自分が理解できるように翻訳したりメモしたりした備忘録です。

# 概要
`FragmentManager`の内部実装が変わった。
`FragmentStateManager`について説明されている。

# 本文

### Androidフレームワークの方のFragmentを使ってはいけない
Androidフレームワークの方の`Fragment`は、Android 10 で非推奨になった。
絶対にAndroidXの方を使う。

### Fragment 1.3.0-alpha08 で FragmentManagerの重要なところが(内部的に)作り直された
`FragmentManager`が直接扱っていたロジックを、内部クラスで置き換えた。
その内部クラスが`FragmentStateManager`である。

元記事を表示

【Kotlin】委譲プロパティ (Delegated Properties) 入門

# 【Kotlin】委譲プロパティ (Delegated Properties)について
## 目次
1. [委譲プロパティ (Delegated Properties)とは](#委譲プロパティ (Delegated Properties)とは)
2. [委譲とは](#委譲とは)
2. [標準ライブラリ](#標準ライブラリ)
4. [まとめ](#まとめ)
5. [参考にさせていただいたサイトなど](#参考にさせていただいたサイトなど)

## 委譲プロパティ (Delegated Properties)とは
* クラスのプロパティ(メンバ)のsetter/getter処理を別のオブジェクトに移譲する仕組み
* ここで私は、移譲とはというのがまだ理解できてないレベルでした。
* byを使うことで、委譲する先を指定できます。

## 委譲とは
* `委譲 (delegation) とはオブジェクト指向プログラミングにおいて、あるオブジェクトの操作を一部他のオブジェクトに代替させる手法のこと。` (wikipedia参照)

* 例
* クラスBで処理を、クラスAのオブジェクト

元記事を表示

UnityAndroidでExportしたprojectをステップ実行

# 環境1
OS : win10 pro
Unity5.6
AndroidStudio2.3.2

OS : win10 pro
Unity2019
AndroidStudio4

# 手順
・Unity C#プラグインメソッドを呼び出す。pluginは消す。
・UnityでExportする。
・AndroidStudioでそれを開く。
・AndroidStudioで、C#で呼び出したプラグインメソッドと同じIFのメソッドを作成する。

# 確認

Java層でブレークポイント停止するのを確認した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/0fba47f2-cc67-5597-4b4a-ac9b37fb7a9f.png)

AndroidJavaObjectの引数は JavaクラスへのFULLPATH / TestMainがクラス名
Unity/Assert/Plugins/Android以下は空にしてEXPORTする。

c#

“`

string Pl

元記事を表示

unityのARFoundationでアプリ作ったのに、実機だとカメラが真っ黒になってしまう時の改善策

unityのARFoundationでARのアプリをエラーなく作ったのに、iosやAndroidで実機で立ち上げると、カメラが真っ黒で映らない!!時の改善方法をご紹介します。

#改善策
* **「camera usage description」** を設定していない

Edit→project settings→Player→iosまたはAndroidを選択(実機の環境)
→camera usage descriptionの欄に

**Camera required for AR**

というように記入してビルド
iosの場合はこれでXcodeの内のinfo.plistにPrivacy – Camera Usage Description が自動的にセットされます。

![スクリーンショット 2020-10-06 17.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704869/13c3af7c-d20f-e92b-f345-dde814670140.png)

* **XR Plu

元記事を表示

localhost をスマホ実機で確認する方法

## 前置き
ローカルで WEB の開発中に実機確認したいことってあるじゃないですか。
サーバーにアップすればもちろん見られるんですが、めんどくさいときもある。

そんなときに、localhost で起動中のページに直接アクセスするには以下の手順を踏むことで確認ができます。

## localhost をスマホで確認する方法
1. 同じ Wi-Fi に PC / スマホで接続する
2. PC のIPアドレスを確認する(Mac の場合は `システム環境設定` => `ネットワーク` など)
3. localhost を PC で起動
4. スマホで `IP:ポート番号` にアクセス(`192.168.1.1:8080` など)
5. 見られる!

## iPhone Safali のWebインスペクタを使う
iPhone – Mac だと、Safali の Webインスペクタ(developer tool) が使えます。

1. iPhone と Mac を有線接続
2. iPhone で `設定` => `Safari` => `詳細` => `Webインスペクタ`をオンにする。
3.

元記事を表示

AIR GOで無料でAndroid/iOSアプリの脆弱性診断

「[AIR GO](https://air.line.me/air/product#airgo)」はLINEが提供しているセキュリティープラットフォーム「[AIR](https://air.line.me/air/what_air)」のプロダクトの1つで無料でモバイルアプリの脆弱性診断を行ってくれるSaaSです。

AIRの[アカウント登録](https://air.line.me/member/signup)を行えば直ぐに使い始めることができます。

作ったAIRアカウントでログインしてAIR GOを開き、AndroidならAPKファイル、iOSならIPAファイルをアップロードするだけで、直ぐに脆弱性診断が行えます。
URLを入力すると参照先にマルウェアが含まれていないかチェックできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96507/7ddfa51c-dd58-7d0a-eae5-85091dd22b5d.png)

脆弱性診断結果は次のようなレポート形式で表示されます

元記事を表示

[Android開発]Javaで画像をサーバーから取得してImageViewに設定しよう!!

#説明
画像ファイルをURLで参照して、サーバーから取得する方法です。(非同期処理)

#Java

“`java:GetImagesUrl
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class ImageUrl extends AsyncTask {

ImageView bmImage;

public ImageUrl(ImageView bmImage) {
this.bmImage = bmImage;
}

@

元記事を表示

OTHERカテゴリの最新記事