- 1. 海外のPlayストアのランキングを見る方法(クエリ使うだけ)
- 2. github actionsでunityビルドしてiOSとAndroidのストアに自動的に提出する
- 3. VLC for Android:楽曲管理画面の解析
- 4. [Android] Jetpack DataBinding
- 5. Firebaseの関連するユーザデータ削除を簡単に実現してみる【Authentication,Firestore,Functions】
- 6. Android ナビゲーションバー透過
- 7. AndroidStudioでメモリ容量が足りないときの対処法
- 8. カスタムViewを作る時、onMeasureをどのように実装すべきか
- 9. ActivityResultContracts.RequestMultiplePermissions チートシート
- 10. GestureDetectorを用いたドラッグ&ドロップの実装【Flutter】
- 11. MIT App Inventor で試しに作った「ボタンを押したら音声合成でしゃべる Androidアプリ」を Kotlin で作ってみた
- 12. VLC for Androidのメイン画面の解析
- 13. VLC for AndroidのSingletonHolderについて
- 14. macストレージ整理
- 15. 検証のためにカスタムROMをスマホに入れるサマリ
- 16. NdkBuildするC/C++コードにdefineマクロの値をProductFlavorで自動的に渡す
- 17. デバッグ署名のAPKファイルに署名したら警告が出た
- 18. UnityPlayerActivity
- 19. React NativeでIntegrated Component Test
- 20. Bluetooth SPP(無線シリアル通信)でExcel連携しリアルタイムに姿勢情報をグラフ描画する
海外のPlayストアのランキングを見る方法(クエリ使うだけ)
以前アフリカのザンビアに住んでいたことがあるのですが、ふと、「**ザンビアでの今のGooglePlayストアのランキングってどうなってるんだろ**?」と気になりました。
ググるとプロキシ変える方法やApp Annieを使う方法が出てきましたが、PlayStoreのURL( https://play.google.com/store/apps/top )にクエリ(`?hl=ja&gl={2文字の国コード}`[^1])を加えるだけでも国外のPlayストアの情報を見ることができるようです。
※国コードである根拠はないのですが、挙動見る限り合ってそう。例
– US
– https://play.google.com/store/apps/top?hl=ja&gl=US
– ザンビア
– https://play.google.com/store/apps/top?hl=ja&gl=ZM
– ロシア
– https://play.google.com/store/apps/top?hl=ja&gl=RU
– 中国
– https://play.google.com/sto
github actionsでunityビルドしてiOSとAndroidのストアに自動的に提出する
こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://twitter.com/mogmet)です。
![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/a7a01e3a-d281-9b12-f3ec-9882a8dae412.jpeg)
この記事を書いてるときは冬なんですけど、もう自分の写真がなさすぎて夏までさかのぼってしまいました。
本日は[CI/CD with Unity, GitHub Actions, and Fastlane](https://medium.com/@davidmfinol/ci-cd-with-unity-github-actions-and-fastlane-e7aaa337784)という記事を参考にUnityでの自動ビルドとストア提出を作ってみたのでそのメモ書きを残しておきます。
## 概要
UnityにはUnity Cloud Buildという公式のCIがあるのですが、
VLC for Android:楽曲管理画面の解析
# はじめに
VLC for Androidの楽曲管理画面を解析する。
# 各種リンク
[アプリ](https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=ja&gl=US)
[GitHub](https://github.com/videolan/vlc-android)
[公式サイト](https://www.videolan.org/index.ja.html)# 楽曲管理画面のスクリーンショット
WIP
# 楽曲管理画面のオブジェクト図
こんな感じ。赤いオブジェクト図は楽曲管理部分
ざっくりいうとリポジトリクラスの状態を監視して、各モデルクラスのインスタンスを取り出してUIに反映している。![Class Diagram0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39706/83175a3a-f2c3-dd9b-f08f-01b5a68c2f0b.png)
# 楽曲管理画面を構成する主なクラス
[Android] Jetpack DataBinding
Android Studio 4.1.3(windows版) での流れとなります
Jetpack DataBindingでボタンイベントを設定する方法を例にして説明します
Android DeveloperのJetpack DataBindingの説明は以下です
https://developer.android.com/topic/libraries/data-binding?hl=ja
## 準備
以下を参考にJetpack Navigation + ViewModelを作成してくださいhttps://qiita.com/smurata_pvt/items/a8454cc635ba693df6b8
## DataBindingを使用するための設定
build.gradleに以下を追加します
DataBindingを有効にするとBindingクラスが自動生成されます“`build.gradle
android {
dataBinding {
enabled = true
}
}
“`## ViewModelでの準備
ボタンイベ
Firebaseの関連するユーザデータ削除を簡単に実現してみる【Authentication,Firestore,Functions】
# 前置き
Firebase Authenticationで、クライアント側から簡単にユーザ登録できるんだから、削除も簡単でしょうと思ってた愚か者のお話です。ログイン中のユーザインスタンスから[deleteメソッド](https://firebase.google.com/docs/auth/web/manage-users#delete_a_user)を叩けばユーザ削除も簡単だよね!やってみよう!
“`
mAuth.getCurrentUser().delete().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Log.d(“DEBUG”,”Successful to delete user.”);
} else {
Log.e(“DEBUG”, “Failed to delete user.”, task.getException());
}
});
“`“`
2021-03-13 11:04:38.569 6841-6841/com.cr
Android ナビゲーションバー透過
“`xml:app/res/values/themers/themes.xml
- @android:color/transparent
- true
- true
“`
“`kotlin:MyActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.
AndroidStudioでメモリ容量が足りないときの対処法
#AndroidStudioでメモリ容量が足りないときの対処法
###筆者がAndroidStudioでアプリを作成しているときに、AndroidStudio側から「メモリの容量が少なくなっている」との指摘がありました。
そのときに作っていたアプリですが、変数の数が非常に多いアプリだったので、作業中に打ち込んだコードの読み込み時間が長くなってしまって、効率よく作業を行うことができなくなってしまいました。
原因を調べてみると、改善策がいくつか見つかりましたが、その中で実際に行ったら読み込み時間が改善されて、最も簡単だった方法を載せます。AndroidStudio起動時の「Welcome to Android Studio」ダイアログ右下の「Configure」をクリックして、「Preferences」を選択する。
![2021-03-21_03.11.14_Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794916/25a78ec0-7e17-7c09-61ce-997c407bd636
カスタムViewを作る時、onMeasureをどのように実装すべきか
カスタムViewを実装するとき、onMeasureを実装していますか?
別に何もしなくても使えるから何もしてない、って人も多いでしょう。私もそうです。
しかし、Viewの種類にもよりますが、wrap_contentが適切に動作しない場合がありますので、どのように実装すべきかを整理してみます。# onMeasureとはどういうメソッドか?
`onMeasure`というメソッドは親となるViewGroupが子Viewの大きさを決めるためにコールします。(より正確には子Viewのmeasureをコールし、その中で`onMeasure`がコールされます)
子Viewは`onMeasure`がコールされると、引数で渡されたMeasureSpecの値を元に、自身のViewの大きさを決めます。
戻り値を返すのではなく、onMeasureの中で`setMeasuredWidth`/`setMeasuredHeight`で自身の大きさを設定しておき、親Viewは`getMeasuredWidth`/`getMeasuredHeight`で子Viewが決めた大きさを参照します。なお、`setMe
ActivityResultContracts.RequestMultiplePermissions チートシート
最近はパーミッション関連の処理が随分と簡潔に書けるようになったのは嬉しいのだけれども、なにが困るってJavaで書かなければならない時に少し混乱することがあるのでチートシートとして :scroll:
– [ActivityResultContracts.RequestMultiplePermissions | Android Developers](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestMultiplePermissions)
– [Getting a result from an activity \| Android Developers](https://developer.android.com/training/basics/intents/result)## Java
“`java
private final ActivityResultLauncherreque
GestureDetectorを用いたドラッグ&ドロップの実装【Flutter】
Flutterでウィジェットのドラッグ&ドロップを実装するには通常、Draggableウィジェットでラップすると実現できる。
だが、例えば「グリッド線に沿ってドラッグ」などのギミックを作りたいときは不向きなのではないか?と思った。
(もしかするとDraggableでもできるかもしれないけど!わからん!)そうして2日間__GestureDetector__を利用したドラッグ&ドロップの方法を模索していたが、苦戦。
最終的にStack Overflowに質問をしてみたところ、秒速で解決したので、日本語でまとめておく。ちなみにStack Overflowの記事はこちら。
https://stackoverflow.com/questions/66719501/why-is-the-origin-of-the-widget-constantly-at-top-left-when-i-use-transform-tran
#コード
“`dart
import ‘package:flutter/material.dart’;class DragButton extends St
MIT App Inventor で試しに作った「ボタンを押したら音声合成でしゃべる Androidアプリ」を Kotlin で作ってみた
## はじめに
以前、このような記事を書いたのですが、これの Kotlin版です。●MIT App Inventor で試しに作った「ボタンを押したら音声合成でしゃべる Androidアプリ」を Java で作ってみた – Qiita
https://qiita.com/youtoy/items/a0c26a3b8a671a2bb707#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E5%85%A8%E4%BD%93上記の「MIT App Inventor で試しに作ったアプリ」の話は以下で書いています。
●ビジュアルプログラミングで Androidアプリ開発ができる「MIT App Inventor」を試す(ボタンを押したら音声でしゃべるアプリを作る) – Qiita
https://qiita.com/youtoy/items/93f7c786ff9d664d3032## 参考情報
今回の内容は、以下を見つつ実装しました。●Kotlinで合成音声を出力するアプリを作成[Android] | トモブ
VLC for Androidのメイン画面の解析
# はじめに
VLC for Androidのメイン画面を解析する。
# 各種リンク
[アプリ](https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=ja&gl=US)
[GitHub](https://github.com/videolan/vlc-android)
[公式サイト](https://www.videolan.org/index.ja.html)# MainActivityのスクリーンショット
![IMG_0801.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39706/ec047221-ecae-7636-4ab1-13d19924d2ad.jpeg)
# メイン画面の表現するクラス
– MainActivity:アクティビィティ
– Navigator:下のタブの処理部分
– AudioBrowserFragment:音楽関係のブラウズ画面
– MainBrowserFragment
VLC for AndroidのSingletonHolderについて
# はじめに
VLC for Androidのリポジトリ周りのソースを見ているとSingletonHolderというクラスを見つけたので調べてみた。# 各種リンク
[アプリ](https://play.google.com/store/apps/details?id=org.videolan.vlc&hl=ja&gl=US)
[GitHub](https://github.com/videolan/vlc-android)
[公式サイト](https://www.videolan.org/index.ja.html)# ソースコード
↓。コンストラクで生成するクロージャを渡して、初回アクセス時はそれを使ってインスタンスを生成して渡すようにしているのがポイント。後はスレッドセーフを保証。
“`
open class SingletonHolder(creator: (A) -> T) {
private var creator: ((A) -> T)? = creator
@Volatile var instance: T? = nul
macストレージ整理
#1. はじめに
私はandroidアプリとiOSアプリの開発に携わってます。
複数の開発アプリがあるため、android studioとXcodeのプロジェクトをたくさん開いたり、たくさんのapkやipaファイルを生成しているようなローカル環境です。その結果、ストレージの容量が無くなり易くすぐに警告がでます・・・。
色々な方法で不要ファイルを削除してきたのですが、
結果、私の環境で実施している効果的なストレージ整理方法を記載します。#2. 環境
MacBook Pro (256GB)
macOS Catalina
Xcode12.2
android studio3.4#3. XcodeのArchiveを消す
Xcodeのメニュー
Window < Organizer を開く。 不要なArchiveを選択し、二本指でタップしDelete Archiveを選択 Archive作るたびに溜まっていくので、リリース後3バージョン前くらいまで残してあとは消しています。 ※OrganizerからdSYMファイルを取得している場合は、Archive消す前に確認。 #4. D
検証のためにカスタムROMをスマホに入れるサマリ
開発をやっていると、Androidバージョンによる動作の違いなども見たくなる。
エミュレータでは見えないようなトラブルが合ったりするので、非常に大変。星の数ほど機種があるAndroid、全機種を持つのは不可能。
ただ全バージョンとまでは行かなくても、
ある程度自由にバージョンは変えられると開発時の検証になったりするので、
非常に助かる。ということで、カスタムROMを使ってみようと思った。
(Root化はやってません。)#OEMロックを解除する
これに関しては機種によって違うから、ググったほうがいいです。
自分が持っている端末だと、機種のホームページ(中国のサイト)に行き、
ユーザ登録をし、解除用のコードか解除用ファイルをもらったような…(数年前にやったのでうろ覚え。#ドライバを用意する
Windows10での方法。Macは持ってないからわからんです。1.Android ADB Interface:起動時のADBコマンドを受け付けてくれる。
2.Android Bootloader Interface:Fastbootモードで接続した際にコマンドを受け付けさせるため
NdkBuildするC/C++コードにdefineマクロの値をProductFlavorで自動的に渡す
# 前提
cocos2dライブラリを使った結構古めのプロジェクトに、Product Flavor対応をしました。
が、一部C++のコードの中にもFlavorに依存して変えたい部分があり、対応方法を探しました。条件としては以下があります。
– cocos2d (version3.17.2)
– かなり古いプロジェクトで上げることが出来ない
– NDKのビルドには`ndkBuild`を使う
– `cmake`ではなく、`ndkBuild`ですまた、筆者はC/C++経験は長かったものの、既に離れて10年経過しており、そもそもmakeファイルはちゃんと書いたことがない(IDEに頼ってビルドしてきた)人間です。
その辺しっかり分かっている方には「今更何を」感があるかも知れませんが、ご容赦下さい。# 現状
## C++コード
“`Foo.cpp
#define SAMPE_ID=xxxxx#if SAMMPLE_ID==xxxx
// ID=xxxxの時のコード
#elif SMAPLE_ID=yyyy
// ID=yyyyの時のコード
#elif SAMPLE_I
デバッグ署名のAPKファイルに署名したら警告が出た
デバッグ署名のAPKファイルに本番用の署名をしようとしたところ、結構な数の警告が出た
“`
apksigner sign –ks release.jks app.apkVerifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1WARNING: META-INF/android.support.design_material.version not protected by signature. Unauthorized modifications to this JAR entry will not be detected. Delete or move the entry outside of META-INF/.
WARNING: META-INF/androidx.appcompat_appcompat.version not protected by signat
UnityPlayerActivity
●Unityプラグインは複数の方法がある(この糞仕様を整理してから株式上場しろよUnityめ)
(1)[UnityPlayerActivityファイルを拡張する](https://docs.unity3d.com/ja/current/Manual/AndroidUnityPlayerActivity.html)
UnityPlayerActivity.javaを使ってUnityプラグインを作る。
準備:![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/32c232f6-6226-7f89-03a8-ec89472558d2.png)
UnityPlayerActivity.java/classes.jarはUnityExportしたProjectにもある。
# [Unity向けAndroidネイティブプラグインの作り方](https://gaprot.jp/2020/03/30/unity-android-native-plugin/)
build.gradl
React NativeでIntegrated Component Test
# Integrated Component Testとは
外部サービス(Web API等)とIntegrationされたUI Componentに着目し、テストすることです。
(どこかに定義があるわけではなく、僕が勝手に呼んでいる名前です。)[React Native公式でTestに関する説明](https://reactnative.dev/docs/testing-overview)があります。その中ではEnd-to-End Testsに分類されると思いますが、
ユーザシナリオに基づいてテストはしません。IntegrateされたComponentに着目し、テストを分割、実行していきます。# なぜ、Integrated Component Testしたいか
理由は以下の通りです。
## 1. デグレチェック/リファクタリングするためのテストがほしい
React NativeでAndroidアプリを開発しています。
そこそこ機能が増えてきて、
コミットする度にデグレしてないか気になるし、
自信をもってどんどんリファクタリングしていきたい。
テストがほしいと思いました
Bluetooth SPP(無線シリアル通信)でExcel連携しリアルタイムに姿勢情報をグラフ描画する
## はじめに
リコーの @KA-2 です。弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VやRICOH THETA Z1は、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。「[Bluetooth AudioデバイスからTHETAを操る](https://qiita.com/mShiiina/items/4b9f74625deeb43763e9)」や「[THETAプラグインで複数のSwitchBot温湿度計と連携する](https://qiita.com/KA-2/items/66222ca713c7ab82bd32)」の記事でも紹介している通り、2020年6月17日のファームウェアアップデートにてBluetooth Classic機器連携が解禁されています