- 1. Android開発でハードコーディングすると怒られるのでstrings.xmlを使う
- 2. Androidアプリ kotolin学習のためソシャゲイベントログアプリを作る01 TOP画像の設定
- 3. コマンドを飛ばして処理させたい-BroadcastReceiver編
- 4. Firebase Authenticationでアカウントが作成出来ないときの原因はこれかも?…
- 5. 【Android】初めてSpinnerを使ってみる
- 6. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その3:ProGuardの利用)
- 7. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その2:C++の利用)
- 8. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その1:逆コンパイルを試す)
- 9. ViewModelでAssistedInjectをするときは拡張関数を作ると便利
- 10. 「Android 絵文字ポリシー」のためにAndroidアプリに実装しないといけないもの
- 11. 端末のHMSバージョンの取得方法
- 12. 【Android】ビューの高さを変更するアニメーション作成
- 13. Couchbase Lite 機能解説:ライブクエリ
- 14. Android TV buildする方法
- 15. ViewModelProvider.Factory を省略する方法
- 16. GradleのVersion catalogで少し詰まったところ
- 17. Dagger Hilt alpha版からの移行
- 18. Using state in Jetpack Composeのcodelabで概念的な用語を拾うメモ
- 19. render problem エラーでレイアウトが表示されなくなった話
- 20. Android + FirebaseAuth で Twitter OAuth認可時の accessToken, secret の取得方法(Kotlin)
Android開発でハードコーディングすると怒られるのでstrings.xmlを使う
レイアウトファイルのactivity_main.xmlで以下のようなハードコードをした場合にAndroidStudioやIDEAで怒られます。
“`kotlin
android:text=”クリック”
“`strings.xml
“`kotlin
addApp
クリック // 追加
“`
strings.xmlに上記のように記述すると、“`@string/btnName “`
というような書き方で定義した文字列を取得することができます。“`kotlin
Androidアプリ kotolin学習のためソシャゲイベントログアプリを作る01 TOP画像の設定
kotolin学習用にAndroidアプリを作成してみようと思う。
某ソシャゲ某イベントの記録アプリ。
今回はTOP画面に画像を設定するところをやってみる。プロジェクト名:AncientBattlefield
開発ツール :Android Studio – Arctic Fox | 2020.3.1##1.画像格納場所
以下フォルダ配下に保存する。
・C:\Android\project\AncientBattlefield\app\src\main\res\drawable保存したファイル名は以下
・top.png##2.activity_main.xmlの編集
activity_main.xmlの格納先は以下画像の通り。
青枠になっている箇所を選択してコード表示にする。
赤枠の行を追加する。
![01_code.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255947/760b092c-ba0b-7ba1-c4c9-298c61091621.jpeg)ファイル選択後、表示
コマンドを飛ばして処理させたい-BroadcastReceiver編
#イントロ
ボタンを押すとBroadcastが飛ぶが、、adbコマンドは受信できない
adbコマンド
“`
C:\Users\su5fi>adb -s 192.168.1.26:38233 shell am broadcast -a ORIGINAL_ACTION -es “d” “d”
Broadcasting: Intent { act=ORIGINAL_ACTION flg=0x400000 pkg=d (has extras) }
Broadcast completed: result=0
“`#環境
Windows10(64bit)
Android11#
“`AndroidManifest.xml
Firebase Authenticationでアカウントが作成出来ないときの原因はこれかも?…
#はじめに
躓いた人のための、軽いメモ用に書くので、そもそも「Firebase Authenticationが何か」などは説明しません。要点絞って説明します。##開発環境
Android Studio(Java)##僕が躓いたところ
Firebase Authenticationの「メール/パスワード認証」で躓きました。(詳しいコードは下をご覧ください。)https://firebase.google.com/docs/auth/android/password-auth?hl=ja
下の画像のようにパスワードを適当に設定して、アカウントを作ろうとしても、はじかれました。
##解決法
どうやら、認証のときのパスワードは「6文字以上」でないと、いけないみたいです。今回は、初めてAndroidのSpinnerを使う機会があったので、その使い方についてまとめてみました。
Spinnerとは画像のように複数の選択肢をドロップダウンで表示する画面部品のことです。## 環境
kotlin: 1.5.31
Android Studio: Android Studio Arctic Fox 2020.3.1 Patch3## 基本的な使い方
### Spinnerの作成
まずはViewにSpinnerを作成します。
SpinnerはAppCompatSpinnerの部分です。“` activity_main.xml
Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その3:ProGuardの利用)
Kotlinを使ってAndroidアプリを作った際に、NCMBのアプリケーションキーとクライアントキーをどこまで隠蔽化できるのか試しています。[前回はC++を使ってコンパイル、隠蔽化する方法を試しました](https://qiita.com/goofmint/items/09c78dcf1fd664b85a37)。今回は難読化を実現するProGuardを使ったらどうなるのか試しています。
## ProGuardについて
[ProGuard](https://www.guardsquare.com/proguard)はAndroid Studio標準で使えるコードの圧縮、最適化、難読化を行うライブラリです。今回は特にオプションを指定せず使ってみました。
## デバッグ環境でも適用する
デフォルトではリリースビルドでのみProGuardが適用されるので、デバッグ環境でも使えるようにします。app/build.gradleを編集します。
“`
android {
// 省略
buildTypes {
release {
mi
Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その2:C++の利用)
[前回の記事](https://qiita.com/goofmint/items/beb81edbefd252de9ba2)では単純にAPKファイルを作成し、その中からアプリケーションキーやクライアントキーが見つけられるのを確認しました。今回から、その隠蔽方法について解説していきます。
まず初回は(といっても一番正解に思えます)C++を使って隠蔽する方法です。
## Androidプロジェクトを作る
C++に対応するため、Androidプロジェクトを作成する際にNative C++を選択します。
![ScreenShot_ 2021-11-04 18.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/db7ec83c-8b27-a87c-e1aa-f5296136c359.png)
言語はKotlinで問題ありません。
![ScreenShot_ 2021-11-04 18.18.06.png](https://qiita-image-store.s3.ap-nort
Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その1:逆コンパイルを試す)
NCMBではアプリケーションキー、クライアントキーの2つを使ってmBaaSとのデータ送受信を行います。この2つのキーを漏洩させないようにしなければいけません。とはいえ、デコンパイルが容易なAndroidアプリ(apkファイル)の場合、キーを何らかの形で隠す必要があるでしょう。ここでいう漏洩というのは、GitHubなどにAPIキーを載せないという話ではなく、Google PlayなどからDLされたAPKファイルでコードを閲覧できないようにする話になります。
今回はまず、コード中にキーを記載して作成したapkファイルをデコンパイル(逆コンパイル)してみます。なお、今回はmacOSを使っています。
## jedコマンドは使えなくなっています
macOSではdex2jarを使ってdexからclassファイルにするのが基本だったようですが、Big surには対応していません。 `com.googlecode.d2j.DexException: not support version.` というエラーが出ます。
[Releases · DexPatcher/dex2jar](https:/
ViewModelでAssistedInjectをするときは拡張関数を作ると便利
ViewModelの初期化時にFragmentから値を渡したいときにAssistedInjectを使いますが、ボイラープレートが増えてしまって非常に煩わしかったりします。そんなとき、以下のExtensionを作ると非常に便利です。
“`kotlin
inline funFragment.assistedViewModel(
crossinline viewModelProducer: (SavedStateHandle) -> T
) = viewModels{ @Suppress(“UNCHECKED_CAST”)
object : AbstractSavedStateViewModelFactory(this, arguments) {
override funcreate(
key: String,
modelClass: Class,
handle: SavedS
「Android 絵文字ポリシー」のためにAndroidアプリに実装しないといけないもの
## はじめに
先日、Google Playのアプリ開発者に向けて「Android 絵文字ポリシー」の追加が発表されました。
これにより、今後のAndroidアプリは常に最新のカラー絵文字フォントを利用する必要が出てきました。
Androidアプリ開発者がしなければならないことについて簡単に記事を書きました。お知らせの詳細は「[デベロッパー プログラム ポリシー: 2021 年 10 月 27 日のお知らせ](https://support.google.com/googleplay/android-developer/answer/11190649#emoji_preview)」をご確認ください。
かなり多くのアプリに影響があります。
アプリの文字列リソースに絵文字は使っていない&ユーザー名などユーザーが任意にテキストを入力できる場所はない&アプリに配信されるテキストに絵文字が含まれることはない、というアプリはこれを避けることができます。
なのでSNSのようなテキストコミュニケーション主体のアプリだけではなく、ゲームアプリなどにも影響のある話になっています。発効は2022
端末のHMSバージョンの取得方法
端末のHMSバージョンは次のコードで取得できます。
“`java
public String getHmsVersion(Context context) {
String version = null;try {
PackageManager packageManager = context.getPackageManager();
if (null != packageManager) {
PackageInfo packageInfo = packageManager.getPackageInfo(“com.huawei.hwid”, 0);
if (null != packageInfo) {
version = packageInfo.versionName;
}
}
} catch (PackageManager.NameNotFoundException exception) {
【Android】ビューの高さを変更するアニメーション作成
#はじめに
`ValueAnimator`を使用してビューの高さを変更するアニメーションの作成方法について記述。ここでは、折り畳みビューを作成し、高さ変更時にアニメーションを付与する。#レイアウト作成
ここでは、トグルボタンで折り畳みを行うようにする。
“`activity_main.xml
Couchbase Lite 機能解説:ライブクエリ
※ Couchbase Mobile(Couchbase Lite, Syncgateway)に関する記事について、[こちら](https://qiita.com/yoshiyuki_kono/items/6a5bbad1b02196a25417)も、参照ください。
## ライブクエリとは
ライブクエリは、データベースの変更を監視するクエリです。
ライブクエリは、変更が発生するたびに結果セットを更新します。これは、リアクティブにデータを最新の状態に保つ必要のある、ユーザーインターフェイス(特にテーブル/リストビュー)を構築するための優れた方法です。ライブクエリ駆動のUIはユーザーが手動で更新しなくても自動的に更新され、データ表示に反映されます。
## 実装解説
### ライブクエリの開始
“`java
Query query = QueryBuilder ①
.select(SelectResult.all())
.from(DataSource.database(database));// Adds a query change listener.
Android TV buildする方法
## 概要
Chromecast with Google TVをAndroid Studioでビルドする方法を解説します。必要なもの
– ディスプレイ
– Chromecast with Google TV
– AndroidStudio
– adb## 手順
– ディスプレイにChromecastを接続する
– Chromecastを起動し、設定 > システム > デバイス情報 > Android TV のOSビルド項目を複数回タップすると「開発者向けオプション」が表示されます
– ChromecastのIPアドレスを調べます
– 設定 > ネットワークとインターネットで接続済みのWifiを選択しIPアドレスを確認します
– adbコマンドを使えるようにする## adbコマンドを使えるようにする
ViewModelProvider.Factory を省略する方法
# ■ 概要
[ViewModel](https://developer.android.com/reference/androidx/lifecycle/ViewModel) にコンストラクタ引数が存在する場合に [ViewModelProvider.Factory](https://developer.android.com/reference/android/arch/lifecycle/ViewModelProvider.Factory) の実装を毎回作るのがめんどくさいので、それを省略する。# ■ Before
こういうのがめんどくさい“`kotlin
// Factory を呼ぶのがめんどい。
viewModels{ Factory(arg1) } // Factory を実装するのがめんどい。
class Factory(private val arg1: String) : ViewModelProvider.Factory {
@Suppress(“UNCHECKED_CAST”)
overri
GradleのVersion catalogで少し詰まったところ
小一時間ハマりました。
Version catalogでKotlin Serializationを管理したかっただけなんですが。。。# OK
“`groovy:gradle/libs.versions.toml
[versions]
kotlin = “1.5.31”[plugins]
kotlin = { id = “org.jetbrains.kotlin.android”, version.ref = “kotlin” }
kotlinserialization = { id = “org.jetbrains.kotlin.plugin.serialization”, version.ref = “kotlin” }“`
“`groovy:app/build.gradle
plugins {
…
alias(libs.plugins.kotlin)
alias(libs.plugins.kotlinserialization)
}
“`# NG
“`groovy:gradle/libs.versions.toml
[versi
Dagger Hilt alpha版からの移行
いささか気を逸した話題ではありますが……
記録しておきます。運用中のプロダクトで使用しているDagger Hiltのアップデートを行いました。
**2.28-alpha**から**2.38.1**までアップデートしています。
以下、やったことを順番に記載します。# build.gradleの編集
hilt-lifecycleが不要になりましたので依存関係から排除します
before
“` build.gradle
implementation “com.google.dagger:hilt-android:$dagger_hilt_version”
kapt “com.google.dagger:hilt-android-compiler:$dagger_hilt_version”
def hilt_lifecycle_version = “1.0.0-alpha02”
implementation “androidx.hilt:hilt-lifecycle-viewmodel:$hilt_lifecycle_version”
Using state in Jetpack Composeのcodelabで概念的な用語を拾うメモ
以下で色々概念的な説明があるので拾っていきます。
Using state in Jetpack Compose
https://developer.android.com/codelabs/jetpack-compose-state#0なんとなくはそれぞれ分かっているんですが、ちょっと一旦用語の整理的な感じなことをしておきます。
だんだん下に行くにつれてレベルアップしていくかも??# Stateとは?
> State in an application is any value that can change over time.
> For example it may be a value stored in a Room database, a variable on a class, or even the current value read from an accelerometer.
アプリケーションにおけるStateとは時間とともに変化しうる値。
例えばRoom databaseに保存される値やクラスにある変数。加速度計から読み取った今の値でさえsta
render problem エラーでレイアウトが表示されなくなった話
2021/11/3 初版
# 事象
AndroidStudioのautofill機能でレイアウトを作っている途中で一回落として再起動したら画像のようにレイアウトが表示されなくなる![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1700794/16d90885-47ff-aab7-e8b7-b2c1d7684d38.png)
# 試したこと(もしかしたらこっちで解決する人がいるかも)
– 下記URLに従ってキャッシュを無効化して再起動
– https://blog.mktia.com/how-to-solve-render-problems-on-android-preview/– APIレベルが高すぎると発生するらしいという記事を見つけたのでレベルを下げる
– https://teratail.com/questions/24420
※よくよく読んでみるとAPIレベル23で当時不具合が発生していたという内容っぽかったです
※記事が少し古い
Android + FirebaseAuth で Twitter OAuth認可時の accessToken, secret の取得方法(Kotlin)
# 概要
Android アプリで FirebaseAuth を使って Twitter OAuth の認可を受けた後、サーバに accessToken と secret を送り、サーバ側で Twitter API を用いて認可されている情報の参照などを行います。
クライアント(Android アプリ)側の実装については、基本的に公式ドキュメント(以下)に記述されている通りの方法でできますが、**accessToken と secret の取得方法** で少し迷ったので、備忘録を兼ねてその解決方法を記します。
https://firebase.google.com/docs/auth/android/twitter-login?hl=ja
# accessToken, secret の取得方法
Androidアプリが Firebase SDK の Twitter OAuth で認可を受けると、`OnSuccessListener::onSuccess` がコールバックされ、その引数(`AuthResult`)から accessToken と secret を取得できます。
以