- 1. GitLab で Unity の Android アプリを自動ビルドするようにしてみた
- 2. 【Flutter】BLoCパターンとは?
- 3. [Flutter] Dribbbleデザイン、そのまま作ろう その15
- 4. DataBinding で ListViewを表示
- 5. AndroidのCIとテストアプリ配信をサービスアカウントを使ったGithubActions+AppDistributionに載せ替える
- 6. ターミナルからAndroidエミュレーターを起動
- 7. lifecycle-livedata-ktx を使ってみた
- 8. Androidをペンタブレットにする(1/3)
- 9. GitLab Runner で Unity の Android SDK が見つからない場合の対処法
- 10. Proxy有りでUnityのAndroidビルド
- 11. 【Android】build.gradleからfastlaneでversionNameを取得する
- 12. Android の Wi-Fi まわりのことメモ
- 13. Android ぱっと見でわかるConstraintLayout
- 14. Android JetpackのWorkManagerの使い方
- 15. androidのAPKを解析する。デコンパイル&デバッグ
- 16. エラー:Gradle sync failed: Cause: invalid type code: 85 の対応[AndroidStudio]
- 17. 貴方に向いた端末は
- 18. ViewModelとLiveDataを使ったDialogFragmentのコールバック
- 19. バックグラウンド音源をミュート
- 20. MVVM + DataBinding でHello World
GitLab で Unity の Android アプリを自動ビルドするようにしてみた
# GitLab で Unity の Android アプリを自動ビルドするようにしてみた
GitLab で Unity の Androidアプリを自動ビルドするようにしてみました。
最初は、Windows10 で試行錯誤していましたが、GitLab Runner の実行ユーザーがシステムアカウントになるためか、エラーが解消されませんでした。
Mac で試したところ問題なく動いたので、Mac を使うほうがよさそうです。## 環境
– macOS Catalina 10.15.4
– GitLab CE 12.8.6(Windows10上の仮想サーバーで動かしています)
– GitLab Runner 12.9.0(Mac上で動かしています)
– Unity 2018.4.20f1## フォルダ構成
| ファイル/フォルダ | 内容 |
|:–|:–|
| TestProject_Unity/ | Unityプロジェクトフォルダ |
| TestProject_Unity/.gitignore | Git無視リストファイル |
| TestAutoTest/Te
【Flutter】BLoCパターンとは?
## BLoCパターンとは?
BLoCパターンは、Business Logic Componentの略
BLoC PatternはFlutterでのアプリケーション開発時に用いる、状態管理手法の1つです。
ビジネスロジックをコンポーネント単位で管理しやすくするためのパターンです。## BLoCのガイドライン
1. インプットとアウトプットは、単純なStreamとSinkに限定する。(Inputs and outputs are simple Streams/Sinks only.)
2. 依存性は、必ず注入可能でプラットフォームに依存しないものとする。(Dependencies must be injectable and platform agnostic.)
3. プラットフォームごとの条件分岐は、許可しない。(No platform branching allowed.)メモ的に参考資料をまとめておきます。
## 参考記事
– [長めだけどたぶんわかりやすいBLoCパターンの解説](https://qiita.com/kabochapo/items/8738223894
[Flutter] Dribbbleデザイン、そのまま作ろう その15
こんにちは 皆さん!Dreamwalkerです。
皆さんはFlutterを使って楽しんで開発進んでいますか?今回は15回目の私がDribbbleのサイトの中で、
気に入れたデザインをFlutterで作ってみた。。ということになります。Dribbbleというサイトは色んなデザイナーさん達が色んなデザインを載せていて
デザインをの知識というか、デザイナーじゃない人でも、開発に参考になったり、役に立ったりするサイトです。まあ、デザインに対して、色んなサイトありますけれど私はDribbbleを愛用してます。#:fire:今回のデザイン:fire:
今回は15番目の「DribbbleのデザインをFlutterでやってみた」になります。
## Flight Ticket右側の席を選ぶ画面を作ってみたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/52956ebe-e295-c343-e229-df0ff2a37e1f.png)
https://dr
DataBinding で ListViewを表示
# はじめに
DataBindingとListViewを使って簡単なリスト表示をやってみたときのメモ。# やったこと
## 1. DataBindingの有効化
Gradle(app)に設定を追記。“`gradle:app/build.gradle
android {
dataBinding {
enabled true
}
}
“`## 2. Modelの作成
ListViewに表示するデータを保持、整形するためのModelを作成。“`kotlin:model/Person.kt
class Person(
private val firstName: String,
private val lastName: String,
private val age: Int
) {
fun getFullName() = “$firstName $lastName”
fun getDisplayAge() = “$age 歳”
}
“`![Untitled Diagram (2).png](
AndroidのCIとテストアプリ配信をサービスアカウントを使ったGithubActions+AppDistributionに載せ替える
##載せ替えた理由
###CI
・BitriseにiOSとAndroidの両方を載せて回していたが、プロジェクト数も多くなり始め契約していたMAX2レーンのプランだとタイミングによって待つ必要が出てきていた。
・それぞれのプロジェクトで使っているBitriseのStepにばらつきが出ていたので、統一するタイミングが欲しかった。
・サーバーサイドがすでに一部載せ替えており、使いやすいし無料枠が余っていると言われていた。
・とりあえず新しい技術には触っておきたかった。###テストアプリ配信
・FabricのFirebase統合に伴い、Betaが利用できなくなる。
https://docs.fabric.io/apple/beta/overview.html##完成形
とりあえずGithubActions用のYAMLファイルを載せておきます“`yaml
name: CIon:
push:
branches:
– developjobs:
build:
runs-on: ubuntu-latest
steps:
–
ターミナルからAndroidエミュレーターを起動
## エミュレーターのリストを表示します。
“`
$ emulator -list-avds
“`Pixel_2_API_26
Pixel_3_API_26などと端末名が表示されます。
## エミュレーターを起動します。
emulator @Pixel_2_API_26エミュレーターが起動されました。
## 参考
https://developer.android.com/studio/run/emulator-commandline
lifecycle-livedata-ktx を使ってみた
`lifecycle-livedata-ktx` とは名前のとおりLiveDataのKTX拡張機能のことである。
具体的には、LiveData + Coroutine で組み合わせて非同期で値を取得して返す仕組みである。## 導入方法
app/build.gradleに以下を追加するだけ。
“`gradle
dependencies {
implementation “androidx.lifecycle:lifecycle-livedata-ktx:2.2.0”
}
“`公式にも載っている
https://developer.android.com/kotlin/ktx## 使い方
ViewModelクラスで、このように書くことができる。
“`kotlin
class MainViewModel : ViewModel() {// 変数宣言と共に、liveData関数内に非同期処理を実装できる
val data: LiveData= liveData {
// 結果を出力
emit
Androidをペンタブレットにする(1/3)
WindowsやMacは通常マウスとキーボードで操作しますが、Androidでは通常タッチパネルで操作します。
そこで、Androidのタッチパネル操作をWindowsから検知するようにして、Androidをペンタブレット化してみます。
実際には、AndroidをBLEペリフェラルにして、Windowsかはブラウザ経由でAndroidにつなぎます。これをやる目的は、毎度の通り勉強のためでして、以下のノウハウを得ることを目的にしています。
* Androidをペリフェラル化できるようになる。
* Androidのタッチイベントを操れるようになる。
* ブラウザからペリフェラルにアクセスできるようになる。この環境が整うと、ちょっとした機能をちょこちょこつけるモチベーションが上がってきます。ということで、ついでに以下のような機能をAndroidペンタブレットにつけます。
* Androidの地磁気センサー、ジャイロスコープ、加速度センサーを検出して、Windowsに通知する。
* AndroidのGPS情報を取得し、Windowsに通知する。
* AndroidでQRコードをスキ
GitLab Runner で Unity の Android SDK が見つからない場合の対処法
# GitLab Runner で Unity の Android SDK が見つからない場合の対処法
## 症状
GitLab Runner で Unity の Androidアプリのビルド時に、下記のエラーが発生。
“`
DisplayProgressbar: Detecting Android SDK
UnityException: Android SDK not found
Unable to locate Android SDK.
“`## 解決法
– システム環境変数に「ANDROID_SDK_ROOT」を追加。
– サービス「gitlab-runner」を再起動。## 説明
Unity 2018.4.20f1 の Preferences -> External Tools で Android SDK の設定はしているが、GitLab Runner でコマンドラインビルドを実行すると、上記のエラーが発生。
サービス「gitlab-runner」は別のアカウントで Windows 10 にログインしているため、レジストリに保存されている Android
Proxy有りでUnityのAndroidビルド
ユーザー名フォルダの直下にある **.gradle** フォルダの中に
**gradle.properties** という名前のファイルを作成
作成したファイルをエディタ等で開き、下記のように記述(Http・Https両方必要かは環境による気がする)
“`gradle.properties
systemProp.http.proxyHost=Proxy指定ホスト
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=ログインユーザーID
systemProp.http.proxyPassword=パスワードsystemProp.https.proxyHost=Proxy指定ホスト
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=ログインユーザーID
systemProp.https.proxyPassword=パスワード“`
■参考URL
https://answers.unity.com/questions/1621072/how
【Android】build.gradleからfastlaneでversionNameを取得する
# 概要
fastlaneでversionNameを使用したい時、build.gradleで管理しつつ、FastfileでもversionNameを使えるようにしたので議事録として記載# build.gradle側の記載
“`:app/build.gradle
apply plugin: ‘com.android.application’
・・・
def versionMajor = 1
def versionMinor = 2
def versionPatch = 3android {
・・・
defaultConfig {
・・・
versionName “${versionMajor}.${versionMinor}.${versionPatch}”
}
“`
それぞれバージョンを定義して、`defaultConfig`のversionNameで組み合わせる# Fastfile側の取得処理
“`:fastlane/Fastfile
platform :android dobefore_all do
Android の Wi-Fi まわりのことメモ
WiFi まわりのことを扱う機会があったので、復習がてら整理してみる。
# パーミッション取得
– AndroidManifest.xml に追加
OS、 targetSDK によって必要な権限が異なる。詳しくは[公式ドキュメント](https://developer.android.com/guide/topics/connectivity/wifi-scan?hl=ja#wifi-scan-permissions)参照。
以下は一例。“`xml:AndroidManifest.xml
“`– 権限取得
Android ぱっと見でわかるConstraintLayout
`ConstraintLayout`で最低限おぼえておくべき4つ
* layout_constraintTop_toTopOf
* layout_constraintTop_toBottomOf
* layout_constraintStart_toStartOf
* layout_constraintStart_toEndOf![android-layout01_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/0dd9d077-900a-d356-4124-59b86a463548.png)
Android JetpackのWorkManagerの使い方
#Android JetpackのWorkManagerの使い方
JetpackはAndroidデベロッパーのために開発されたライブラリ、ツールなどのことを総称したものです。
今回はその中のWorkManagerという機能について説明します。https://developer.android.com/jetpack?hl=ja
##WorkManagerとは
APIの一つで、アプリが終了したり再起動しても延期できるタスクをスケジューリングする機能のようです。
定期的なサーバとの同期や、ログなどの送信に便利そうです。https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja
下記が下位互換性
API 23 以上が搭載されたデバイスでは JobScheduler を使用
API 14~22 が搭載されたデバイスでは BroadcastReceiver と AlarmManager を組み合わせて使用JobSchdulerなどは確かによく使われていましたが、これをさらにパッケージ化し
androidのAPKを解析する。デコンパイル&デバッグ
とあることからアプリを解析することになった。
以下はその手順。参考)
https://coky-t.gitbook.io/owasp-mstg-ja/android-tesutogaido/0x05c-reverse-engineering-and-tampering##### アプリを準備
当たり前なので割愛。
(~~ipaは取り出しにくい~~)## apktoolのダウンロード
apk形式はzipなので、apk→zipと拡張子を変えても展開はできる。
ただ、apktoolのほうがリソースをデコードしてくれたり、dexを変換してくれたりと便利
macなら`brew install apktool`で可能。コマンド入ったら、`apktool d hoge.apk`で展開される。
ちなみにアプリのファイル形式がapkxという場合もあるみたい。
これは複数のapkをまとめた形式なので`unzip`などで一度解体してからでも可。## 解体した内容
resにリソースなどが含まれる。
javaの内容は`classes*.dex`というファイルにまとまっている。
`d2j-
エラー:Gradle sync failed: Cause: invalid type code: 85 の対応[AndroidStudio]
## 概要
– 2~3ヶ月ぶりにAndroidStudioを起動したら、既存、新規を含めてすべてのプロジェクトが動かなくなった件。– 結論としてはJDKをAndroidStudio内蔵の物に変更したらエラーがなくなって動くようになった。
– イベントログに表示されていたエラーコードは以下になります。
“`Gradle sync failed: Cause: invalid type code: 85“`## 引用情報
下記のサイトの内容を参考に対応をした。
[Gradle Sync Failed in Android Studio 3.6 Cause invalid type code :85](https://translate.googleusercontent.com/translate_c?depth=1&hl=ja&prev=search&rurl=translate.google.com&sl=en&sp=nmt4&u=https://stackoverflow.com/questions/60435743/gradle-sync-failed-in-andr
貴方に向いた端末は
#じゃあまず使用方法を教えてくれるかな
|使用方法|Windows|MacOSX(MacBookシリーズ)|iPhone|Android(スマホ)|Android(タブレット)|iPad|ChromeBook| 備考 |
|—|—|—|—|—|—|—|—|—|
|ブラウジング|〇|◎|△|△|◎|◎|◎|広い画面でUIが使いやすいとブラウジングしやすい。性能とかより機動性が大事|
|動画編集|×~◎|◎|△|×~△|×~〇|△~◎|×~△|性能が低かったり画面が小さいと厳しい。|
|電子書籍|△|〇|△|△|◎|◎|×~◎|ChromeBookを買うときはAndroidアプリ対応機種を買うこと。|
|絵を描く|△|〇|△|×~△|△~◎|〇~◎|×~△|動画編集ほどではないが性能が必要|
|ゲームをする|△~〇|×~△|〇|△~◎|△~◎|〇~◎|×|もしあなたがゲームを楽しみたいのなら機動性や可用性が優れたハイエンドタブレットorハイエンドスマホのどちらかが必要。Windowsはエロゲは揃いが良いらしいがそれ以外(特にゲーム性の良い
ViewModelとLiveDataを使ったDialogFragmentのコールバック
2020年にもなっていまだにDialogFragmentのコールバック最適解がないのでGoogleは早くJetPackに作ってほしい
“`kotlin
class MainActivity : AppCompatActivity() {private val viewModel: DialogViewModel
by viewModels() override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)if (savedInstanceState == null) {
SampleDialogFragment().show(supportFragmentManager, “sample”)
}viewModel.result
バックグラウンド音源をミュート
効果音を再生する時に裏で音楽再生アプリ等で再生していると音が重なって聞き取れない!
という時にバックグラウンドの音を一時的にミュートする方法バックグラウンド音源をミュート
“`java:
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
AudioFocusRequest focusRequest =
new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
MVVM + DataBinding でHello World
# はじめに
「Hello World」をDataBindingで作ったのでメモ。# 目標物
![Untitled Diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472695/47230b21-38cd-c98c-de5c-4baeeeb63d9b.png)# 構成
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472695/b4c7f8f8-cb97-f3d6-5984-482c8713d0bf.png)Viewには、値を表示するTextViewとイベント発生用のButtonのみ配置。
それぞれをViewModelの変数やメソッドとバインドさせる。
画面に表示するデータの保持、整形はModelが担う。# やったこと
## 1. Gradle Scriptに追記
DataBindingを有効にするために、以下のように追記する。“`gra