- 1. Composeで左右に揃えた複数行のレイアウトを組む
- 2. 【忘備録】ライブラリの依存関係を表示する
- 3. Unity2019でAdmob実装時にクラッシュして表示されないときの対処法
- 4. Android 12に最速で最低限対応してみた!
- 5. App Links の Android 12 うんぬん関連メモ
- 6. 【Flutter】Statefullなカウンターアプリをhooks_riverpod+state_notifier+freezedでリファクタリングする
- 7. Android Studioでビルドエラーと格闘する
- 8. [Jetpack Compose] Paging Libraryを使わずに無限リストを実装する
- 9. M1 MacでAndroidエミュレーターを起動する
- 10. kotlinで画面のタップイベントを実行する方法
- 11. コマンド飛ばして処理させたいーServerClient編
- 12. Android開発でハードコーディングすると怒られるのでstrings.xmlを使う
- 13. Androidアプリ kotolin学習のためソシャゲイベントログアプリを作る01 TOP画像の設定
- 14. コマンド飛ばして処理させたい-BroadcastReceiver編
- 15. Firebase Authenticationでアカウントが作成出来ないときの原因はこれかも?…
- 16. 【Android】初めてSpinnerを使ってみる
- 17. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その3:ProGuardの利用)
- 18. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その2:C++の利用)
- 19. Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その1:逆コンパイルを試す)
- 20. ViewModelでAssistedInjectをするときは拡張関数を作ると便利
Composeで左右に揃えた複数行のレイアウトを組む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/d7545a6c-2f9b-453d-7387-b922ce5b486e.png)
こういうやつ。全体の幅を固定値ではなく、もっとも幅の大きい行に揃えて、かつ他の行も左右に揃える。簡単そうに見えて地味に難しいやつ。# 答え
IntrinsicSizeを使用することで簡潔に記述することができます。“`kotlin
@Composable
fun AlignedColumn() {
Column(modifier = Modifier.width(IntrinsicSize.Max)) {
Row {
Text(text = “中華そば”, modifier = Modifier.weight(1f))
Spacer(modifier = Modifier.width(16.dp))
Text(text = “800円”)
}
Row {
Text(
【忘備録】ライブラリの依存関係を表示する
ライブラリの依存関係を表示する
./gradlew :app:dependencies
こんな感じで依存関係が表示される
“`
+— com.google.firebase:firebase-config:21.0.1
| +— com.google.android.gms:play-services-tasks:17.0.2 -> 17.2.0 (*)
| +— com.google.firebase:firebase-abt:21.0.0
| | +— com.google.android.gms:play-services-basement:17.0.0 -> 17.5.0 (*)
| | +— com.google.firebase:firebase-common:20.0.0 (*)
| | +— com.google.firebase:firebase-components:17.0.0 (*)
| | \— com.google.firebase:firebase-measu
Unity2019でAdmob実装時にクラッシュして表示されないときの対処法
https://kaedeee.com/unity2019-admob/
しばらく更新していませんでした!というのもアプリ作るのにはまってて笑
(アプリのURLはまた後で)
ところで今回は、 Unity 2019でAdMobを実装した際にクラッシュしてしまいアプリが表示できなくなってしまう時の対処法です。
(やはり Unity 2019は最新版ということで2019に関する記事がなかなかなーい!!笑笑)
というわけで僕のでよければ参考にどうぞ。
結論から言うと以下二つに対応することでうまくいきました!!
(あ、Android アプリ用です。この記事)
#Unityのバージョンを確認する
結論から言うと
Unity 2019 1.4f1
×
Google mobile ADS Unity plugin 3.16
が最強!
はじめ自分は
Unity のバージョン→ 2019.3.0a3
に
AdMobのバージョン→Google mobile ADS Unity plugin v3.17
を投入!
ですがこの時にx86 no
Android 12に最速で最低限対応してみた!
みなさんいかがお過ごしでしょうか?
私はこの前の週末、某大型商業施設で献血してきました。(400㎖)
プチ社会貢献できましたので、自己満足している今日この頃です。ご褒美?に爽健美茶とアクエリアスのどっちか選んでね。と言われたので
お茶より「栄養」がありそうなアクエリアスにしました。あと箱ティッシュもらいました。
※飲み物配給は血抜き中に飲んでね、という意味でした。急に水分減るので。血抜き時間は5分ほどです。ほて、そのときの出来事なんですけど、献血のバスの横をみるとタンカの上でおんなの人が倒れてました。
どうしたのかな?**早速血の供給を受けてるのかな?**と思ったんですが、ここは病院ではないのです。どうやら血を抜きすぎて?**貧血を起こした**ようです。
かわいそう。だいたい、体重50kgでも100kgオーバーでもおんなじ量抜くのが変なんですよね。
みなさん、くれぐれも献血しすぎには要注意です。
***
さて前置きが長くなりましたが、今回のお題は、Android 12対応です。
Pixel 6シリーズが発売されて、ぼちぼち使っている人が現れてますので、
こりゃ早
App Links の Android 12 うんぬん関連メモ
軽くドキュメントを読んだ際のメモです。
# ドキュメントに関して
– おいらが読んだ時点での[ドキュメント](https://developer.android.com/training/app-links)に関して言えば、和文と英文で文章がまったく異なり、リンクのタイプ分類のような基本的なレベルで異なることが書かれているなど、結構微妙な感じだった、、、。英語側のほうがまともだとは思うのだが、web links の scheme が HTTP, App Links 側が HTTP and HTTPS であると書かれているけど、実際は両方とも https を含む動作をするので、何を信じでいいのかわからない、、、。# たぶんこういうことなんだろーなということ
– Android 12 から云々という話は、端末OSの話であり、ビルド時の compileSdk や targetSdk とは無関係だと思われ。
– http, https 以外は、今まで通りの deep link.
– http, https は、
– 端末OSが Android 12 未満の場合はダイアログで選択。
【Flutter】Statefullなカウンターアプリをhooks_riverpod+state_notifier+freezedでリファクタリングする
FlutterのNullSafetyがstableになってしばらくたち、最近になってriverpodがstableになったので、記念にhooks_riverpod + state_notifier + freezedの使い方を最低限記載しておきます。
プロジェクトを作った時に作られるカウンターアプリを上記パッケージを使って実現するようにリファクタリングしていきます。# tl;dr
– flutterの初期アプリをhooks_riverpod+state_notifier+freezedを使うようにリファクタリングする
– 結論としては単機能なアプリでこんなに複雑にやると余計わかりずらい(趣旨としてはサンプルなので良いのですが、、、)
– freezedも無理やり使ったしhooksはさすがに使えなかったので、hooks特有の機能については本記事のスコープ外#### 完成版の全コード
https://github.com/tokku5552/flutter_riverpod_sample/tree/1.0.0
## 環境
– Android Studio“`yaml:
Android Studioでビルドエラーと格闘する
# はじめに
2016年頃まで自作のAndroidアプリを作って、[Google Play](https://play.google.com/store/apps/developer?id=hamham)に公開していました。
2021年の某日。突然Googleから**「ご対応のお願い: Google Play のポリシーをアプリが遵守していません」**とのメールがきて、アプリがストアから削除されてしまいました。
最後のアプリのアップデートをしてから5年も経って、突然こうなったということは、**Google Play側のデベロッパープログラムポリシーの変更に追随できておらず放置していたということが原因**と考えられます。
幸い、ポリシーに違反していた部分は軽微だったので修正自体は難しくなさそうです。
ポリシー違反部分を修正して再アップすればよいのですが、なんせ5年も前なので、開発環境を整えていたPCは手放してしまったし、アプリのビルドやストアへの公開方法も忘れてしまっている状態です。
残っているのはzipで固められた当時のソースコードのみ。ということで、開発環境を構築して、アプリをビ
[Jetpack Compose] Paging Libraryを使わずに無限リストを実装する
末尾までスクロールすると追加の要素を読み込んでいくやつです。
Androidではこの無限スクロールを実装するのにPaging3を使うことで簡単に(?)実装することができます。https://developer.android.com/jetpack/androidx/releases/paging
Jetpack Compose対応もされているので、そちらを使って無限スクロール実装するのがベターな気がしますが、それを使わなくともかなりシンプルに実装することができましたので紹介します?♂️
## 完成図
25件ずつ追加で読み込んでいます。サンプルコードなので通信処理はなしでListのジョインをしているのでローディング表示なくスルスルいきます。
末尾にはローディングがあるので読み込みに時間がかかる場合は見える感じです。
M1 MacでAndroidエミュレーターを起動する
# はじめに
Flutterのアプリ開発をしようとしてめちゃくちゃハマりました。
## Flutterのチュートリアル
https://flutter.dev/docs/get-started/test-drive?tab=terminal
iOSはこれ見ながらやれば大丈夫です。
問題はAndroid
## 何が問題か
手順の途中で `flutter doctor` でそれぞれのプラットフォームが起動準備できているか確認します。
iOS であれば XCode, Android であれば Android Studioを事前にインストールしておきましょう。
しかし、AndroidについてSDKがないと怒られました。
## 解決策
SDKを手動で入れます。
まず、JDKを入れましょう。とりあえず brew で最新stableをインストールしましょう。
“`sh
$ arch -arm64 brew install openjdk
“`次に sdkmanager と呼ばれる Android SDK用のCLIをインストールします。
https://develo
kotlinで画面のタップイベントを実行する方法
kotlin学習中メモ
## onTouchEventを設定
“`MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}// 画面タッチ処理はoverride fun onTouchEventの中に書く
override fun onTouchEvent(event: MotionEvent?): Boolean {
// ここに処理を追記していく
return super.onTouchEvent(event)
}
}
“`画面をタップした時になんらかの処理をしたい場合は、onTouchEventを設定してその中に実行したい処理を書いていけばOK
試しに
コマンド飛ばして処理させたいーServerClient編
#イントロ
BroadcastReceiverでコマンドを送れるが、
他のアプリとの通信どうやるの?ってのがあって。
ネットワークでやったほうが面倒くさくね?ってことでServerーClient編
Serverで待ち受け
(Serverボタンをクリック)メッセージ送信
(Clientをクリック)
※別端末#環境
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