- 1. クラウドレンダリングを試してみた
- 2. Kotlin Multiplatform は iOS エンジニアの開発者体験が良くないのではと思っていたが、SKIE を使えば良いと思った。
- 3. 【Android】多言語への対応【Kotlin】
- 4. Androidのワイヤレスデバックの接続が不安定で悩んでいる
- 5. JetpackCompose Textの1文字だけ色変える方法
- 6. 【Android】状態保存はSavedStateHandle.saveableが便利
- 7. 日本でもStudio Botが使えるようになっていたよ!
- 8. Android の WebView をコード上でズームイン/ズームアウトする
- 9. Kotlin Serizalizationを使ってみた
- 10. AndroidアプリからGoogle Driveにファイルをバックアップする
- 11. Android でビルドエラーになった話
- 12. 単純な棒グラフをJetpackComposeでつくる
- 13. CircleShapeとRoundedCornerShape(50)、どちらが良いのか
- 14. 【2023年】初心者がやってみた!Android アプリの公開
- 15. Stable Diffusion APIを使って簡単に画像生成アプリを作ってみた
- 16. Android開発「startActivityとstartActivityForResultが共存してることってあるのか…」
- 17. androidのイベント通知
- 18. Jetpack ComposeでLottieのanimationを無限にする方法
- 19. AndroidStudioで実行ボタンが押せない時の対処とそのしくみ
- 20. visibilityよりもisVisibleを積極的に使った方がいい理由
クラウドレンダリングを試してみた
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 =
【Android】状態保存はSavedStateHandle.saveableが便利
# はじめに
AndroidにはActivityが破棄されるタイミングが存在します。
例えば、端末内のメモリーが圧迫されている状態などがそれに該当しますが、開発者設定でActivityを保持しない設定にした場合も同様の状態を再現することが可能です。
Activityが破棄されるとViewの状態はことごとく初期化され、文字を多く入力する画面などで発生すればユーザビリティが大きく低下するような問題が発生します。
その場合の対策としてSaveStateHandleが存在していると思いますが、このSaveStateHandleを便利に使用可能なsaveableを今回ご紹介したいと思います。# 使用準備
まずsaveableを使用するためには以下を追加する必要があります。“`build.gradle
implementation “androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1”
“`
saveableは2.5.0で追加された機能になりますので、バージョンを指定する際は2.5.0以上を指定してください。# saveable
日本でもStudio Botが使えるようになっていたよ!
# 概要
なんと、CanaryでStudio Bot(Android StudioのAIチャット)が日本でも使えるようになっていました!
(Android Studio Iguana | 2023.2.1 Canary 5 で確認しました)https://android-developers.googleblog.com/2023/09/studio-bot-expands-to-international-markets.html
# 設定方法
Settings > Appearance & Behavior > System Settings > Data Sharing の「Send usage statistics to google」をONにする
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441643/beb9432d-3440-ca1d-1630-dfb237d4620d.png)View > Tool Windows > Studio Bot でTool Windo
Android の WebView をコード上でズームイン/ズームアウトする
Android の WebView におけるズーム実装の情報が少なかったのでメモ。
# ズームインする
表示されている WebView の中心に向かって段階的にズームインする。
“`kotlin
WebView.zoomIn()
“`# ズームアウトする
段階的にズームアウトする。
“`kotlin
WebView.zoomOut()
“`# 可能な限りズームインする
“`kotlin
WebView.zoomBy(100f)
Kotlin Serizalizationを使ってみた
業務アプリのjsonパーサーをmoshiからKotlin Serializationに置き換えました。(新規のAPIに対するものだけですが)
そのときのまとめです。
## 準備
gradle pluginを使います。
(アノテーションに必要なのかな?)
“`kotlin:root/build.gradle
plugins {
kotlin(“plugin.serialization”).version(“1.9.0”).apply(false)
}
“`
“`kotlin:module/build.gradle
plugins {
kotlin(“plugin.serialization”)
}“`
ライブラリを入れます。
“`kotlin:module/build.gradle
dependencies {
implementation “org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0”
}
“`
サンプルではバージョンカタログを使っている。## jsonをkotlinクラスにパ
AndroidアプリからGoogle Driveにファイルをバックアップする
AndroidアプリからGoogle Driveにファイルをバックアップするは下記サイトが参考になりそう
https://zenn.dev/amegane/articles/e5d086f7ebaf8d
Android でビルドエラーになった話
## はじめに
Android Studio でビルドができない問題について個人的メモとしてまとめました。
## 環境
macOS Ventura 13.1
Android Studio Dolphin | 2021.3.1 Patch 1## エラー #1
`Could not find tools.jar.` となりビルドができない
“`
> Could not find tools.jar. Please check that /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home contains a valid JDK installation.
“`### 解決方法
メッセージにあるように `tool.jar` を所定の位置に配置すると解決します。
私の環境ですと `/Users/<ユーザー名>/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib` にありましたのでコピーしました。“`
$
単純な棒グラフをJetpackComposeでつくる
# はじめに
今回はすごくシンプルな棒グラフをJetpackComposeで作っていこうと思います
### 本文
今回は左と下部にのみ基準線がありますが、各RowやColumnのところにBoxで線を追加してあげることで囲むことも可能です
“`kotlin
@Composable
fun BarChart(
data: Map,
maxValue: Int,
isShowHalf: Boolean
) {
val gray = HogeTheme.colors.Gray
val textMeasurer = rememberTextMeasurer()
val measurerStyle =
HogeTheme.typography.fontSize12.copy(color = HogeTheme.colors.Gray)
Column(
modifier = Modifier
.fillMaxSize()
.paddi
CircleShapeとRoundedCornerShape(50)、どちらが良いのか
こういう角丸にしたいときに使うやつ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/849b438e-fe8a-375d-358c-e615ff6db3c4.png)## 結論
実装としては、どっちでも同じです。
“`kotlin
/**
* Circular [Shape] with all the corners sized as the 50 percent of the shape size.
*/
val CircleShape = RoundedCornerShape(50)
“`https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/RoundedCornerShape.kt;l
【2023年】初心者がやってみた!Android アプリの公開
# はじめに
こんにちは、mamimeです:relaxed:
この記事は初心者がなるべく難しいことをせずにAndroidアプリを公開する手順を書きました。
私もアプリ開発自体未熟なので、もし訂正箇所がありましたらぜひとも教えてください。# 初めてのアプリ公開
アプリ開発初心者の私が、紆余曲折もありつつAndroidアプリを公開することができました:muscle:
嬉しいです!
その過程でいろいろ躓く部分があったので、初めての方に参考になればと思い、この記事を書きました。https://play.google.com/store/apps/details?id=com.differentiate19.quiz
:pencil2: アプリ名:超高速!微分チャレンジ:pencil2:
ちなみに私が公開したアプリは微分の問題を30秒以内にどれだけ解けるか競うという内容のアプリです。
高校数学を学んだ高校生や、学び直しを始めた社会人の方の助けになりたいと思い、作らせていただきました。
ぜひインストールして遊んでみてください!
レビュー等もお待ちしています。Stable Diffusion APIを使って簡単に画像生成アプリを作ってみた
# はじめに
以前に比べると盛り上がりは感じないかもしれないが、それでもAndroidやiOSストアのランキング上位には画像生成AI系のアプリがいくつも並んでいて、生成系AIにも興味があったので同じようなものが作れないかなと思った。しかし、全部自前で用意するとなると時間もお金もかかりそうなのでまずはAPIとしてそのまま利用できるサービスを探してお試ししてみることに。
# 利用したサービス
Stable Diffusion本家のStability AIでも利用できるAPIは用意されていたが
https://platform.stability.ai/APIや料金体系がわかりやすそうだったりしたので今回はこちらのサービスを利用してみました。
https://stablediffusionapi.com/![price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245797/a80f644b-ab4c-e887-807a-18a8e26acea5.png)
APIを利用できるのはSta
Android開発「startActivityとstartActivityForResultが共存してることってあるのか…」
## はじめに
Android開発でアプリケーションの異なる画面(アクティビティ)間での遷移は非常に一般的な操作です。
この記事では、開発時「えっ、なんでこのコード`startActivity()`と`startActivityForResult()`が両方あるの?」と思ったため、その違いについて調査しました。
(開発時に見ていたコードはJavaでしたが、今回はGoogle社がAndroidアプリの開発言語として公式認定したKotlinでサンプルコードを作成しています。)## startActivity()
### 基本的な使い方
はじめに`startAcitivty()`についての説明も記載しておきます。
`startActivity()`これはアクティビティを単純に起動する基本的なメソッドです。
通常、このメソッドは`Intent`オブジェクトを引数として受け取ります。“`kotlin
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
“`
このコードは、`Second
androidのイベント通知
Androidアプリケーションにおけるイベント通知の方法は、アプリケーションのアーキテクチャや要件に合わせて選択する必要があります。この記事では、主要なイベント通知方法であるLiveData、StateFlow、EventBus、BehaviorProcessorを比較し、それぞれの特徴や使用ケースについて説明します。
# LiveData
LiveDataはAndroid Architecture Componentsの一部であり、データの変更を監視し、UIコンポーネントに通知するために使用されます。以下はLiveDataの特徴です。### 特徴:
ライフサイクル感知型:LiveDataはライフサイクルオーナー(通常はActivityやFragment)にバインドされ、ライフサイクルに合わせてデータの更新と通知を行います。
データ変更通知:データが変更された場合、自動的にUIに通知され、UIの更新が行われます。
非同期サポート:非同期操作を行うためにCoroutineやRxJavaと組み合わせて使用できます。
### 使用ケース:UIコンポーネント(例:TextView、
Jetpack ComposeでLottieのanimationを無限にする方法
### 今のやりかた
“`Kotlin
LottieAnimation(
composition,
iterations = LottieConstants.IterateForever,
)
“`### 昔のやりかた
“`Kotlin
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.search_animation))
val progress by animateLottieCompositionAsState(composition = composition, iterations = LottieConstants.IterateForever)
LottieAnimation(
composition = composition,
progress = { progress },
)
“`### 参考
https://stackoverflow.com/a/73371580
AndroidStudioで実行ボタンが押せない時の対処とそのしくみ
### 概要
Qiitaのキャンペーンをきっかけに
AndroidStudioとKotlinで学生時代ぶりにスマホアプリを作っています。
その時に出たエラーとその解決策をまとめました。### 出たエラー
エラーというより、AndroidStudioの実行ボタン(▲のボタン)がグレーアウトして押せなかった。
### 解決方法
AndroidStudioのメニューの「File」→「Sync Project with Gradle Files」をクリックし、処理が終わると押せるように。
### 解決した理由
AndroidStudioのビルドは、Gradleで行われている。
プロジェクトとGradleを同期しないとプログラミングが実行できないことがある。
visibilityよりもisVisibleを積極的に使った方がいい理由
# こいつらは一体何
`visibility`も`isVisible`もAndroidにおいて**Viewの表示・非表示を制御するプロパティ**です。たとえばidが`hoge_button`というボタン要素があったとしてこれを**表示状態**にしたい時、次のように書けます。
“`kotlin
binding.hogeButton.visibility = View.VISIBLE
“`しかし、以下のようにも書けます。 :eyes:
“`kotlin
binding.hogeButton.isVisible = true
“`**「え、じゃあどっちのほうがいいの?!」**
ってなりませんか。(私はなりました。)
# 結論
**`isVisible`を積極的に使おう!** です## Booleanなので関係のない値が入ってしまう可能性が低い
たとえば`visibility`を使う場合、値はIntが入ります。
“`kotlin
binding.hogeButton.visibility = View.VISIBLE
“`この`View.VISIBL