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

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

PythonでAndroidアプリを作る。

# はじめに
PythonアプリをAndroidで動かす場合2つの手段がある。
1. **Pydroid3でPythonスクリプトを起動する。**
Pydroid3はGooglePlayからインストールできるアプリ。PythonスクリプトをAndroid上で動かすIDE。pipも使えるので、PC上のPythone IDEを使うのとほぼ変わらない。KivyでGUIを書けば、アンドロイドアプリを起動しているのと変わらない。ただPydroid3を起動して、該当のPythoneアプリを実行するという2段階の処理をしないといけないので、アプリアイコンクリックで一発起動させるということはできない。

2. **Kivy+Buildozerでアンドロイドアプリを作る。**
Buildozerは、KivyでGUIを書いたPythonアプリを、apkファイルにパッケージ化するツール。このapkファイルをAndroidにインストールすれば、アンドロイドアプリとして動作する。

 本記事は2について、Windows環境でBuildozerのインストールから、パッケージ化までの一連の流れをまとめる。

# 目

元記事を表示

Jetpack Compose、Modifier.shadowの罠

ある日、ほぼほぼ三角形の形状をしたdrawableに影をつけたくなりました。[^fact]
そういうときは`Modifier.shadow`を使えばいいですね。
[^fact]: デザイナーからの指定

例えばこんな風に。

“`kotlin:composable.kt
modifier = Modifier
.shadow(
elevation = 2.dp,
shape = GenericShape { size, _ ->
moveTo(x = 0f, y = 0f)
lineTo(size.width, 0f)
lineTo(size.width / 2f, size.height)
},
spotColor = Color(0xFF000000),
ambientColor = Color(0xFF000000)
)
“`

ところがどっこい、影はつくけどdrawableの外側がやたらギザつきました。
はて

元記事を表示

ローカル環境で外部ライブラリを使用する方法

### ローカルにライブラリをダウンロードしてきて使いたい

というときのやり方をまとめておきます

## 実行環境

Android Studio Framingo

### 1.ライブラリをダウンロードしてくる
例えば、Gsonであれば、
https://mvnrepository.com/artifact/com.google.code.gson/gson
にアクセスすることで、データのダウンロードが行えます。
ここで、使用したいバージョンの.jarファイルをダウンロードしてきます。
### 2.jarファイルを使用したいAndroidStudioProjectのフォルダに入れる
project名→app→libsフォルダ内に.jarファイルを入れます
(libsフォルダがなかったら作成してください)
### 3.gradleで依存関係を記述する
gradle(app)のdependencies内で
“`kotlin
implementation files(‘libs/gson-${ver名}.jar’)
“`
のように、libs/使用したいライブラリファイル名の形

元記事を表示

モバイルアプリのアクセシビリティ対応(スクリーンリーダー、VoiceOver)

# はじめに
以前に[プロジェクトで行ったVoiceOver対応(読み方の変更)](https://qiita.com/repepe2en/items/42c8dc1e679a31c96c24)を投稿しましたが、今回はアプリ全体で行った対応について、目標にしているところとその対応方法をまとめて備忘録としてまとめます。

自分の参加しているプロジェクトでは[Apache Cordova](https://cordova.apache.org/)というモバイルアプリ開発向けのフレームワークをベースに開発を行っています。
技術的には3割ほどネイティブの実装で他はwebの技術を利用しています。
なので、iOS,Androidとタグにありますが、この記事ではHTML,TypeScriptでの対応方法です。

# 方針

[Web Content Accessibility Guidelines (WCAG) 2.0](https://waic.jp/translations/WCAG20/Overview.html)に準拠したアプリの実現。
[WAI-ARIA](https://develope

元記事を表示

a-4-2-3.Retrofit2を使ったDELETEのAPIアクセス

### a-4-2-3.Retrofit2を使ったDELETEのAPIアクセス

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### 課題
3. Retrofit2でDELETEメソッドのAPIの呼び出しができるか。
3. Retrofit2のDELETEメソッドで呼び出しのBodyを取得できるか。

#### Github

https://github.com/wakizaka24/AndroidTest

#### テスト実装

“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestService = Retrofit2TestSer

元記事を表示

Composeでカスタムのなんちゃってクロスフェードを作る

## 経緯

現在アプリでいろんなViewをComposeに置き換え中です。

その中で、アニメーションで子要素の表示が切り替わる`CrossFadeView`という内製のカスタムViewGroupがありました。そしてComposeにはもともと[Crossfade](https://developer.android.com/jetpack/compose/animation?hl=ja#crossfade)が備わっています。

ただ、内製の`CrossFadeView`は実際はクロスフェードせず、前のViewが完全にフェードアウトしてから次のViewがフェードインするという、**”嘘CrossFade”** だったのです……なんとまあ……。[^fact]

[^fact]: 実はこのCustomViewGroupは自分が作っている。
[^fade]: [fade through](https://m2.material.io/design/motion/the-motion-system.html#fade-through) というらしい

|クロスフェード|嘘クロスフェード[^fa

元記事を表示

a-4-2-2.Retrofit2を使ったPOSTのAPIアクセス

### a-4-2-2.Retrofit2を使ったPOSTのAPIアクセス

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### 課題
3. Retrofit2でPOSTメソッドのAPIの呼び出しができるか。
3. Retrofit2のPOSTメソッドで呼び出しのBodyを取得できるか。

#### Github

https://github.com/wakizaka24/AndroidTest

#### テスト実装

“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestService = Retrofit2TestService()

元記事を表示

a-4-2-1.Retrofit2を使ったGETのAPIアクセス

### a-4-2-1.Retrofit2を使ったGETのAPIアクセス

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### 課題
3. Retrofit2でGETメソッドのAPIの呼び出しができるか。
3. Retrofit2のGETメソッドでURLクエリを取得できるか。
3. Retrofit2のGETメソッドで戻り値を取得できるか。

#### Github

https://github.com/wakizaka24/AndroidTest

#### テスト実装

“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestServi

元記事を表示

2023 Android の IME (キーボード) の作成

# 作成したもの

### [Play store](https://play.google.com/store/apps/details?id=com.kazumaproject.markdownhelperkeyboard)
https://play.google.com/store/apps/details?id=com.kazumaproject.markdownhelperkeyboard

### [Github](https://github.com/KazumaProject/JapaneseKeyboard/tree/master)

https://github.com/KazumaProject/JapaneseKeyboard/tree/master

# 参考にした記事

– [InputMethodService Android Developers](https://developer.android.com/referen

元記事を表示

コンパイルエラーが出てないからって油断はしちゃだめだよ

## 経緯

こんなコードがありました。

“`kotlin
val hoge: Hoge?
if (savedInstanceState != null) {
hoge = savedInstanceState.getParcelable(“hoge”)
} else {
hoge = arguments?.getParcelable(“hoge”)
}

if (hoge == null) {
throw IllegalArgumentException()
}
“`

私は、良かれと思ってこういうコードに書き換えてコミットしました。

“`kotlin
val hoge: Hoge = if (savedInstanceState != null) {
savedInstanceState.getParcelable(“hoge”)
} else {
arguments?.getParcelable(“hoge”)
} ?: throw IllegalArgumentException()
“`

冗長な処理を短く書いただけ とい

元記事を表示

新卒入社半年でRakumonの開発でしてきたこと

# Rakumonについて
* **いつでもどこでもRakumonを使える**
Rakumonは**24時間365日**、**家** でも **外出先** でも **通学中** でも利用することができます。

* **厳選されたRakumon講師陣**
Rakumonで採用している講師陣は、**国公立などの難関大学**に在籍している学生を採用しています。


* **豊富な質問対応教科**
質問できる教科は以下の表通りになっています。

| 教科

元記事を表示

FlutterでのFirebase関連のビルドエラー(android)とその解決方法

FlutterAndroidでプロジェクトをビルドする際に、Firebase関連でいくつかのエラーが発生しました。この記事では、それらのエラーとその解決方法について詳しく説明します。特に、`android/build.gradle`と`android/app/build.gradle`の変更点に焦点を当てています。

## 1. Firebase関連のビルドエラー

### エラー内容

ビルド時に以下のエラーが発生しました。

“`
Error while evaluating property ‘extraGeneratedResDir’ of task ‘:app:mapDebugSourceSetPaths’
“`

### 解決方法

このエラーは、FirebaseのGradleプラグインのバージョンが古いために発生することがあります。解決するためには、`android/build.gradle`の`dependencies`セクションを以下のように更新する必要があります。

“`gradle
dependencies {
classpath ‘com.an

元記事を表示

DroidKaigi 2023 Day2 セッション概要&感想

# はじめに
DroidKaigi 2023に参加してきましたので、オフラインで聴講してきたセッションの概要とその感想についてまとめていきます。
Day1の紹介もしてますのでよろしければご覧ください

https://qiita.com/t_nana/items/1c6ab960a5b3db3b1dbd

# MVIに基づくStateMachineアーキテクチャ:KMMとJetpack ComposeとSwiftUIを組み合わせる

## 概要
クロスプラットフォームテクノロジーであるKotlin Multiplatform(以後KMP)と相性がいいアーキテクチャであるMVIを導入し、KMP, Jetpack Compose(Android用のUIライブラリ), SwiftUI(iOS用のUIライブラリ)の

元記事を表示

DroidKaigi 2023 Day1 セッション概要&感想

# はじめに
DroidKaigi 2023に参加してきましたので、オフラインで聴講してきたセッションの概要とその感想についてまとめていきます。
Day2のセッション紹介はこちらです

https://qiita.com/t_nana/items/8789fd8dbcc5b18ab560

# これで安心! Compose 時代のDon’t keep activities対応
## 概要
開発者向けオプションにある「アクティビティを保持しない(Don’t keep activities)」をONにすることで、メモリの少ない端末の動作を再現できるので、その状態で起こるバグ、Activity破棄時にも画面情報を引き継ぐための方法について解説したセッションでした。
セッション内では、ComposeにおいてはrememberSavableを使うことで、引き継ぎたい情報のkey設定やsave/restoreの処理を記述することなく引き継ぎ処理ができるのでおすすめとのことでした。ただし、ここで使っているのはBundleのため、このBundleの容量上限である50MBを超えないようにする必要があると

元記事を表示

Flutterってどうなん?実際に商用アプリ開発で使ってみた感想

これまで3年ほどWebエンジニアとして働いており、いろいろあって今年からFlutterでモバイルアプリを開発しています。

Flutterを使い始めて半年が経ったので実際に使ってみて感じたいいと思ったところとイマイチだと思ったところを紹介したいと思います。

# Flutter とは?

Flutter は 複数のプラットフォームに対応したオープンソースなフレームワークです。現在では、Android・iOS・Web・Windows・MacOS・Linuxに対応しており、単一のコードで複数のプラットフォーム上で動作可能なアプリケーションを作成することができます。

https://flutter.dev/

# 実際に使って感じたいいところ、イマイチなところ

## いいところ

### 学習コストは意外と高くない

Flutterでは、Dartという言語を使います。

https://dart.dev/

個人的な感想としては、Javascript, Typescript に似ているなーと思っています。
なので、Webをずっと触っていた私はすんなりと入ることができました。

型定義がで

元記事を表示

クラウドレンダリングを試してみた

GeForce NOWのようなグラウド上でパワフルなゲームやアプリを動かす方法としてUEのPixel StreamingやTencentCloudのCAR等があります。
重たい処理があるアプリをサーバー上のVMで動作させ、その映像をブラウザ等でリアルタイムに受け取ってアプリを操作するという概念です。

今回はTencentCloudのCAR(クラウドレンダリング)を試してみました。
動作確認の用に簡易に動かせるTestモードがありますので、それで動作させるところまでをこの記事のゴールとします。

## TencentCloud CARのアーキテクチャ
![PtTx648_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300377/8c20e435-9605-ac3b-853b-975a435d9c3a.jpeg)
(参照元:https://www.tencentcloud.com/jp/products/car)

## アプリケーションのアップロード
– TencentCloudのConsoleに

元記事を表示

Kotlin Multiplatform は iOS エンジニアの開発者体験が良くないのではと思っていたが、SKIE を使えば良いと思った。

# 経緯

ある日 [AndroidDagashi](https://androiddagashi.github.io/) を見ていたら [#292 2023-09-10](https://androiddagashi.github.io/issue/292-2023-09-10/) に

> Swift-friendlyなAPIをKotlin Multiplatformで利用可能にするSKIEがオープンソースで公開
> https://touchlab.co/skie-is-open-source

というものが紹介されていて、[公式サイトの Features](https://skie.touchlab.co/features/) を読んでみたら、Kotlin Multiplatform (KMP) を用いた iOS/Android アプリ開発について思うところがありましたが、それを解決できるのではと思いました。

# 概要

この記事は [いくつかある SKIE の機能](https://skie.touchlab.co/features/) の [Sealed Classes]

元記事を表示

【Android】多言語への対応【Kotlin】

# はじめに
以前 この記事の中で使用している端末の言語設定をもとに言語を指定する
と言ったようなことをしたのですが、どのくらいの数の言語に対応しているのか気になったので調べてみました。

# 国一覧表

|表記|言語|国|
|:—|:—|:–|
|CANADA|ENGLISH|カナダ|
|CANADA_FRENCH|FRENCH|フランセ・カナディアン(カナダやアメリカの一部)|
|CHINA|CHINESE|中国|
|FRANCE|FRENCH|フランス|
|GERMANY|GERMAN|ドイツ|
|ITALY|ITALIAN|イタリア|
|JAPAN|JAPANESE|日本|
|KOREA|KOREAN|韓国|
|PRC|SIMPLIFIED_CHINESE|中国|
|TAIWAN|TRADITIONAL_CHINESE|台湾|
|UK|ENGLISH|イギリス|
|US|ENGLISH|アメリカ|
|ROOT|ROOT|その他|

元記事を表示

Androidのワイヤレスデバックの接続が不安定で悩んでいる

# Androidのワイヤレスデバック
以前にAndroidのワイヤレスデバックについてQiita記事を書きました

https://qiita.com/cozyk100/items/dce05340d5922b79ada3

USBケーブルがないので、便利な反面、Wi-Fiを使うので安定性に欠けます。

現在、Android11でワイヤレスデバックを使用していますが、接続が不安定で困っています。既にペアリングはできているのですが、Android端末側でワイヤレスデバックを開始したとき、すぐに接続できる場合と、いくら待っても接続しない場合があります。

Android端末側、PC側を再起動したりしても、全く状況変わらず。そのうち、諦めた頃にあっさり接続したり。また接続しなくなったり。

今現在、その原因が何なのか全くわかりません。Wi-Fiを通じてAndroid端末とAndroidStudioがインストールされているPCとの接続は普通にできています。

全く、その日、その時の気分で接続できたり、できなかったりとしか思えません。

何か、Androidのワイヤレスデバックのデバック?(一

元記事を表示

JetpackCompose Textの1文字だけ色変える方法

JetpackComposeで途中の文字に対して違う色を設定する方法です。

# リファレンス
https://developer.android.com/jetpack/compose/text?hl=ja#multiple-styles

# コード

リファレンスの公式サンプルコードを、もう少しカラフルにしてみました。
“`.kt
@Composable
fun MultipleStylesInText() {
Text(
buildAnnotatedString {
withStyle(style = SpanStyle(color = Color.Green)) {
append(“H”)
}
withStyle(style = SpanStyle(color = Color.Cyan)) {
append(“ello”)
}

withStyle(style =

元記事を表示

OTHERカテゴリの最新記事