- 1. 【M1Mac】Android Studioインストール後に起きたエラーたち
- 2. UnityでAndroid向けにbuildして実機で動作確認する方法
- 3. TimberでJetpack Composeのログを良い感じに。
- 4. 【kotlin】超簡単なMVPを実装してみた、②LocalRepository設定(ローカルデータに保存、読み込み)
- 5. Canvas#drawTextを使用している部分での「最新の絵文字のサポート」対応
- 6. Observable.intervalみたいに一定間隔実行をKotlin Flowで書きたい
- 7. OPPO Reno5 Aでマイナンバーカードを読めない問題を考える
- 8. 【Android studio】ImageViewへ容量の大きい画像を読み込む方法
- 9. ConstraintLayoutでつまずきやすいViewが重複した時の解決策
- 10. WebViewで基本認証させる際の注意点
- 11. 記事というよりただのメモ?
- 12. 【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
- 13. gradleのバージョンを上げないで”Could not determine java version from”を回避する方法
- 14. キーボードの表示、非表示を切り替える方法
- 15. モバイルシステム技術検定(MCPC)2級の対策
- 16. Android開発におけるドキュメント作成”Dokka / KDoc”の導入手順
- 17. Gradle 6.7.1以下 -> 6.8以上 にアップデートするとbuild.gradleのdependenciesのexcludeの挙動が変わる
- 18. 集中力を維持するためのポモドーロタイマー
- 19. Guide to app architectureからプラクティスを拾うメモ UIレイヤー編
- 20. EditTextのカーソルの行の位置を取得するには
【M1Mac】Android Studioインストール後に起きたエラーたち
## はじめに
念願のM1macbookを手に入れたので、諸々の設定を終えた後ウキウキしながらAndroid Studioの環境構築に取り掛かりました。
インストール自体は問題なくできたのですが、その後エミュレーターや実機でアプリを実行するときに色々とエラーに遭遇しました。(私がインストールしたArctic Foxパッチ4ではM1でも動作できるよう対応済みだったようですが、それでも詰まってしまいました。)
これからM1でAndroid Studioを入れる方もいらっしゃるかと思うので、備忘録代わりに記事を書いてみようと思います。※エラーログなどきちんと記録していないので、大部分を記憶に頼りながら書いています。(ほとんど自分用のメモです…)もし間違いなどありましたらご指摘いただけますと幸いです。
※記事を書き慣れていないためわかりにくい点もたくさんあるかと思います。それ以前に超絶プログラミング初心者です。お手柔らかにお願いいたします…?## 実行環境
| 項目 | 情報 |
| —— | ——–
UnityでAndroid向けにbuildして実機で動作確認する方法
基本的な内容ですが個人のメモとして残します。
# 環境
– Windows10
– Unity Hub 2.4.5
– Unity 2020.3.25f1
– Android Studio 2020.3.1# Unity側のbuild準備(SDK等の設定)
Android向けの環境構築方法については以下の記事を参照。
https://qiita.com/Nossa/items/4b2c5026698ed4ab7d2b
https://qiita.com/tak001/items/e7a5f21742d463a37a39# Android側の設定を開発者モードにする
Unity側の設定が終わったら次は Android 側の設定を行います。機種によって異なりますが、
「設定」 > 「システム」 > 「端末情報」 に行くと「**ビルド番号**」という項目がありますので、**7回ほどタップ**します。すると「開発者モードになりました」というようなメッセージがでます。
# Android側でUSBデバッグモードにする
続いては、Android側でシステムの画面まで戻ると、
「
TimberでJetpack Composeのログを良い感じに。
# はじめに
こんにちは。
今日はJetpack Composeのログについて書こうと思います。Viewを使用していた時はピュアな`android.util`で事足りていましたが、Jetpack Composeでは基本Composable関数単位でログのタグを出力したいと思い調べてみました。約二年Androidエンジニアをしていますが、Timber初めて使ってみました。ふふふ。
# どうするの?
Timberというログ出力ライブラリを使用します。実際は`android.util`をラップした軽量のライブラリだそうです。Timberについて詳しく知りたい人は[こちら](https://github.com/JakeWharton/timber)を覗いてみてください。やることは以下です。
1. Timber.DebugTreeを継承したクラスを作り、自分好みにカスタマイズ!
2. Applicationクラスにて(1)で作成したクラスを初期化する。1. Timber.DebugTreeを継承したクラスを作り、自分好みにカスタマイズ!
“`kotlin:TimberSe
【kotlin】超簡単なMVPを実装してみた、②LocalRepository設定(ローカルデータに保存、読み込み)
# はじめに
今回はMVP(アーキテクチャ)に沿って、LocalRepository設定(ローカルデータに保存、読み込み)を実装していきたいと思います。本記事は「【kotlin】超簡単なMVPを実装してみた、①Presenter」の内容を引き継いで実装しています。
これまでの内容は
[【kotlin】超簡単なMVPを実装してみた、①Presenterの実装](https://qiita.com/Na0yaKub0/items/d688c440dfa9c3a49a7f)
をご参照ください# 実装内容
LocalRepository(ローカルデータに保存、読み込み)まで実装する。
①EditTextに文字を入力してボタンを押したら、文字を保存し、下部のTextViewに表示させる。
②アプリを閉じ、再起動したら保存した文字を読み取り、下部のTextViewに表示させる。
![presenter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784089/327d668f-79fd-381d-ac6
Canvas#drawTextを使用している部分での「最新の絵文字のサポート」対応
2022/2からGoogle Play Storeのストア規約に「Android 絵文字ポリシー」が加わり、古い端末でも最新の絵文が表示できるようサポートすることが求められるようになります。
[Android 絵文字ポリシー](https://support.google.com/googleplay/android-developer/answer/11190644?hl=ja)TextViewを継承しているコンポーネントを使用している部分は、AppCompat(v1.4以上)を用いたり、AppCompatを用いない場合もemoji2ライブラリを使用することでほとんど何もしなくてもorかなり簡単に対応できるよう公式のサポートがあります。
[最新の絵文字のサポート](https://developer.android.com/guide/topics/ui/look-and-feel/emoji2?hl=ja)しかし、[Canvas#drawText](https://developer.android.com/reference/android/graphics/Canv
Observable.intervalみたいに一定間隔実行をKotlin Flowで書きたい
# この記事で紹介すること
Observable.intervalみたいな一定間隔での処理実行をKotlin Flowで書きたい。
`flow.interval`みたいなオペレータがなかったので、どうしようかなと。“`kotlin
// これをKotlin Flowで書きたい
val disposable = Observable.interval(100, TimeUnit. MICROSECONDS).startWith(0L)
.subscribeOn(Shedulers.computation())
.subscribe {
// 定期実行したい処理
getHogeHogeData()
}
“`# やり方と解説
### Flowの中でdelay関数を使う
解説と言いつつすごい単純で申し訳ないんですが、ループするflowを作って、flowの中にdelay関数を呼んであげれば似たような動作になりました。“`kotlin
// 0.1sec間隔で処理実行
private fun i
OPPO Reno5 Aでマイナンバーカードを読めない問題を考える
#はじめに
人気スマホのReno5 Aを買いました。
カメラ性能など素晴らしいプロダクトだと思っているのですが一点問題があります。:::note info
私のマイナンバーカードを読み取れないアプリがある
:::
価格コムやTwitterによると このスマホで読み取れてる人、読み取れない人がそれぞれ居るようです。
また他のスマホでも同様の結果が出てることがあるようです。私の環境においてGooglePlay で “`マイナンバーカード“` と検索して
上位に出てくるアプリでの検証結果は下記です。| アプリ名 | 制作 |結果 / エラー番号 |
|—|—|—|
|[マイナポータル](https://play.google.com/store/apps/details?id=jp.go.cas.mpa)| デジタル庁 | ログインできる(読める) |
|[マイナポイント](https://play.google.com/store/apps/details?id=jp.go.soumu.mkpf.mkpfmypage)|総務省自治行政局地域情報化企画室|MKC
【Android studio】ImageViewへ容量の大きい画像を読み込む方法
#状況
実機で操作時にImageViewへ2MB以上のjpg画像を挿入しようとしたところ、アプリが落ちてしまった。
メモリ不足に陥っている可能性が考えられた。#対処方法
1. jpg画像をBitmapに変換、
2. Bitmapのサイズを調整。
3. ImageViewに張り付ける。“`kotlin:MainActivity.kt
val bitmap = adjustImage(resources, R.drawable.imagefilename)
menuImage.setImageBitmap(bitmap) //・・・3private fun adjustImage(res: Resources, resID: Int): Bitmap {
var bmp = BitmapFactory.decodeResource(res, resID) //・・・1
return createScaledBitmap(bmp, 320, 264, true) //・・・2
}“`
#懸念事項
BitmapFactory.decod
ConstraintLayoutでつまずきやすいViewが重複した時の解決策
#はじめに
ConstraintLayoutでつまずく中でも頻出するのがViewの重複問題、押出し問題かと思います。
そこで、今回自分が役立った二つの要素を紹介したいと思います###layout_constrainedWidth
“`xml:
WebViewで基本認証させる際の注意点 —
## 最初に結論AndroidアプリのWebViewで基本認証させようと思って検索するとよく見かけるサンプルコードについて、これではコンテンツに埋め込まれている外部サイトのオブジェクト(画像とかロギングツールとか広告オブジェクトとか)へ認証情報を流してしまうかもしれないので、注意が必要。
つまり、**認証情報を提示するホスト/URLを、きちんと制限しましょう。**という至極当然の結論。—
## よく見るサンプルコード“`java
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
handler.proceed(“ユーザ名”, “パスワード”);
}
});
“`つまり、WebViewClientクラスの「onReceivedHttpAuthRequest」をオーバーライドして
記事というよりただのメモ?
Androidアプリで複数フラグメントで共有のViewModelを持つ方法について
その前にViewModelの概念についてよくわからないまま使用していたので、いろいろ調べたら以下の単語が出てきた
・activityViewModels
そのアクティビティで定義されてるViewModel?
・viewModels
こいつはなんだ???どうやって使うんだ?
・navGraphViewModels
こいつはnav_graph.xmlで同じnavigation内に定義されているfragmentの時に使えるらしい。testFragmentで以下のような実装をしてみた。
private val sharedViewModel: SharedViewModel by activityViewModels()
private val test2ViewModel: Test2ViewModel by activityViewModels()
SharedViewModelはMainActivityで定義されている
Test2ViewModelは別のfragmentで生成されたViewMode
【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
# MVPとは?
Androidアーキテクチャの一つ。
ActivityやFragmentで行っていた処理を以下の三つの役割に分ける。・Model(データに関する処理を行う)
・View(画面に関する処理、クリック等のイベントを拾ってPresenterに送る処理を行う)
・Presenter(Viewからイベントを受け取り、Modelを操作したり、Viewに伝え画面操作を行うロジカルな処理を行う)**[メリット]**
・Activity,Fragmentの肥大化を防げる。
・テストがしやすい。# 実装内容
Presenterまで実装する。
EditTextに文字を入力してボタンを押したら、下部のTextViewに表示させる(超簡単)。
![presenter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784089/327d668f-79fd-381d-ac6a-bec60fe05c83.png)# 実装
**[レイアウト]**
①editText
②button
③textView
gradleのバージョンを上げないで”Could not determine java version from”を回避する方法
このエラーが出た場合はgradleのバージョンを上げてやれば良いのですが
なんらかの理由でgradleのバージョンを上げられない場合の回避策です。この方法はandroidで署名なしreleaseビルドを作成する際に使いました。
## 古いjavaをダウンロードする
“`
curl -O https://corretto.aws/downloads/resources/8.312.07.1/java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.debsudo apt install ./java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb
“`## 古いjavaを指定してビルドする
“`
JAVA_HOME=~/.jdks/corretto-1.8.0_312 ./gradlew assemble
“`
キーボードの表示、非表示を切り替える方法
#はじめに
キーボードの表示、非表示に関しては、ほぼ全てのアプリで実装が必要になると言っても過言ではない要件ですよね。
いつも調べて思い出すことが多いので、簡単にまとめておこうと思います。#キーボードの表示
表示する際の実装は以下“`ViewExtensions.kt
fun View.showKeyboard(
flag: Int = 0
) {
(context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
.showSoftInput(this, flag)
}
“`#キーボードの非表示
非表示にする際の実装は以下“`ViewExtensions.kt
fun View.showKeyboard(
flag: Int = 0
) {
clearFocus()
context.getSystemService()?.hideSoftInputFromWindow(windo
モバイルシステム技術検定(MCPC)2級の対策
皆様
お久しぶりです。satolabです。
最終更新から1年以上の月日が流れました。現在私は某IT企業でモバイル系のインフラエンジニアをしております。この1年は慌ただしく、qiitaをはじめ情報発信や趣味の開発に中々時間を割けておりませんでした。
現在も四苦八苦の日々ですが、少しずつ情報発信の方も再開出来ればと思っております。
前置きが長くなりましたが、今回はちょっとニッチな資格である”MCPC2級”の対策について紹介したいと思います。
私は11月に受験し、無事合格出来ました。
##概要
モバイルシステム技術検定(通称:MCPC)は、モバイルシステムの提案、構築、運用のために必要となる知識とそのレベルを明示することによって、IT関連技術者の学習意欲の喚起を行い、その学習成果を検定(試験)により測定することが可能となります。
(引用: https://www.mcpc-jp.org/kentei/gaiyou.html)
試験は年に二回あり、後半の回はCBT方式で受けることができます。私は最寄りのテストセンターで受験しました。
なおボーダーは公開されていません。##対
Android開発におけるドキュメント作成”Dokka / KDoc”の導入手順
# Dokkaとは
“KDoc”形式で記載したコメントを、Javadocと同様な形でドキュメントを作成できる。
JavaとKotlinが混在したプロジェクトのドキュメントも生成可能https://github.com/Kotlin/dokka
# 導入
“` project/build.gradle
buildscript {
ext {
dokka_version = “1.6.10”
}
dependencies {
classpath “org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}”
}
“`“` app/build.gradle
apply plugin: “org.jetbrains.dokka”android {}
dependencies {}// dokkaHtml 用の設定
dokkaHtml.configure {
outputDirectory.set(new File(“${buildDir}/dokkaHtml”))
Gradle 6.7.1以下 -> 6.8以上 にアップデートするとbuild.gradleのdependenciesのexcludeの挙動が変わる
# 概要
androidアプリを作成中、gradleをアップデートしたら、それまで問題なく使えていたアプリソース中のkotlinファイルでの`import kotlinx.coroutines.CoroutineDispatcher`に対して`Unresolved reference: CoroutineDispatcher`とエラーメッセージがつくようになってビルドができなくなった。
アプリケーションモジュールのbuild.gradleのdependenciesに`implementation “org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$kotlin_coroutine_ver”`を追加してやったところビルドが通るようになった。## 理由
アプリで使っているcoroutineライブラリとpagingライブラリに入っているそれとがバージョンが違っていたのでpagingライブラリのほうから抜くためにアプリケーションモジュールのbuild.gradleのdependenciesで以下のようにしていたのだが、gradle 6.
集中力を維持するためのポモドーロタイマー
学内の学生主体で進めるプロジェクトで「ユーザの集中力を持続させるシステム」を構築する機会がありました。
その際にポモドーロタイマーを用いて休憩時間を管理してくれるアプリを作成致しましたので、その内容について少しだけ触れさせて頂きます。
まず今回使用したのはReact Nativeです。iosとandroidの双方に対応できるクロスプラットフォームフレームワークを使用したいという理由から使用しました。
![Screenshot_20220110-015520_project1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2488482/7170aeca-6619-6bd5-c219-5c5e1918db46.jpeg)
上の画像が実際のアプリ画面です。
左上にタスクに取り組む時間を、右上に休憩時間を打ち込み、開始ボタンを押します。指定した時間が過ぎると端末が振動し、テキストが変化します。
![Screenshot_20220110-015956_project1.jpg](https://
Guide to app architectureからプラクティスを拾うメモ UIレイヤー編
https://developer.android.com/jetpack/guide?hl=en
上記から拾ってメモしておきます :pencil:
ちょっと分かりにくい部分として、最初に書いておきたいのが、UIレイヤーとUIは別で、UIレイヤーにはState holder(ViewModelなど)も含み、UIやUI elementはActivityなどを指すようです。
https://developer.android.com/jetpack/guide/ui-layer?hl=en より
(あとでまとめ記事的なのを作るかも?)
## Activityなどのアプリのコンポーネントにアプリのデータや状態を持ってはいけない
> Given the conditions of this environment, i
EditTextのカーソルの行の位置を取得するには
EditTextのカーソル位置を取得するのは、調べたりするとすぐ出てきたりしますが、カーソルが何行目なのかを取得する方法が、無かったので忘れないようにする為、書いておく事にします。
# EditTextのカーソルの行の位置を取得する方法
“`
val layout: Layout = binding.editText.layout
val offset: Int = binding.editText.selectionEnd // カーソルの位置
val line = layout.getLineForOffset(offset) //引数に指定したoffsetの行番号(カーソルが何行目か)
val primaryHorizontal = layout.getPrimaryHorizontal(offset) // 引数に指定したoffsetの水平位置が返ってきます(カーソルが左端からの水平位置)
“`EditTextのLayoutを使う事で、取得することができました。
# カーソルを上に移動させる方法
“`
binding.editText.setSele