- 1. [Unity][Fee]各プラットフォームでファイル選択ダイアログを表示する
- 2. Android StudioでJavaのversionで躓いたのでまとめる
- 3. Wifi経由でadbコマンドを実行しよう(2.Linux編)
- 4. [備忘録][Android Studio]fontFamilyで独自フォントを選択できるようにする
- 5. [備忘録]Kotlinでシングルトンクラスの作成方法
- 6. [kotlin] RecyclerViewの実装、クリックイベント付き
- 7. [Android]端末からサーバへ画像のアップロード
- 8. [Android]Navigation でどこまで戻るか制御する (Pop To と Inclusive)
- 9. libtorch を Android でビルドするメモ
- 10. 【和訳】Refactoring to Kotlin(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)
- 11. 桁区切り付きで数値を表示するExtension
- 12. [Android] ProgressBarの使い方
- 13. Retrofit2で共通エラー処理。ついでにローディングの判定
- 14. Expo × React NativeアプリをAndroidで動かした時、TouchableOpacityのonPressが動かない
- 15. macOS Catalina + Unity 2019.3でAndroidビルド(IL2CPP)に失敗する場合の対処
- 16. Androidアプリ開発でのSonarQube~Java~
- 17. [Android] プログレスダイアログ(通信中のぐるぐる)
- 18. ダークモードとは何か?各OSの設定方法からiOS/Androidアプリの対応方法まで
- 19. カスタムビューの実装でよく使うヘルパー関数を晒す
- 20. LiveData Builderを使ってコードをスッキリさせる
[Unity][Fee]各プラットフォームでファイル選択ダイアログを表示する
# はじめに
自作ライブラリ開発日記です。
https://github.com/bluebackblue/fee_core# なにが問題なのか
ファイル選択ダイアログはプラットフォームによって対応方法が違う。
キャンセルが取れないプラットフォームがある。
Androidは「AndroidManifest.xml」を設置する必要がある。# コード
“`cs
/** 開く。
*/
public void Open()
{
Fee.Platform.Platform.GetInstance().OpenFileDialog();
}/** Main
*/
public void Main()
{
string t_full_path = Fee.Platform.Platform.GetInstance().GetOpenFileDialogResult();
if(t_full_path != null){
UnityEngine.Debug.Log(t_full_path);
}
}
“`# 解決策
## Editor「UnityEditor.Edi
Android StudioでJavaのversionで躓いたのでまとめる
# はじめに
ここ数ヶ月、実務インターンをするようになってから、インターン先が変わるたびに環境構築をしているのですが、適当にやっているせいでJDKのバージョンが原因なエラーに幾度となく躓いてきました。
毎回調べて、
ああ…JDKのversionが原因か。で、どうするんだっけ。と調べるのが不毛なため備忘録として記事にしました。
この記事は自分のユースケースにおける対処法なため、他の方には当てはまらないかもしれませんが、随時updateしていければと思います。
# 躓いた具体的なユースケース
まず、
“`Powershell
% java -vesion
“`とターミナルで打つと、ご自身のJDKのバージョンがいくつか確認できるのでご参考までに。
## How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
この時の自分のJDKは
“`Powershell
java 12.0.2 2019-07-16
“`でした。
> Java 9で「モジュール」の機能が
Wifi経由でadbコマンドを実行しよう(2.Linux編)
#はじめに
ずっとWindowsからAndroidアプリのテストをしていたので意識していませんでしたが、
Linuxからでもadbコマンドを実行することができるようです。
#使用ツール
– Linux環境
– teraterm
– Linux用のAndroid SDK
– WinSCP#手順
1. Android端末の開発者モードをONにしてUSBデバッグを可能にする。
2. PC、Android端末ともにWifiに接続。
3. Linux環境にAndroid SDKをインストール。
4. sdkmanagerコマンドでパッケージをインストール。
5. adb接続。
6. adbコマンドを実行。
7. adbを切断。ほとんど、[Wifi経由でadbコマンドを実行しよう(1.Windows編)](https://qiita.com/erik_t/items/47fcb7e2ec092bfb6761)と
やることは変わりませんが、
[3. Linux環境にAndroid SDKをインストール。](https://qiita.com/erik_t/items/8cb59d624b66
[備忘録][Android Studio]fontFamilyで独自フォントを選択できるようにする
# 1.resフォルダ配下にfontフォルダを作成する
resフォルダを右クリック→New→Directory
New Directory入力欄で「font」を入力してOKボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571891/9b63b0c4-0128-a082-3503-6bd2f2167568.png)# 2.fontフォルダ配下に独自フォントを配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571891/5bad0346-99d6-908c-8de7-954c9cba0244.png)# 3.fontFamilyで配置した独自フォントが選択できるようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571891/c5bfd667-29e0-5
[備忘録]Kotlinでシングルトンクラスの作成方法
# シングルトンなクラスの作成方法
## 書き方その1
マルチスレッドに対応しています。
“` kotlin
// シングルトンクラス
class StatefulContext {companion object {
// シングルトンインスタンスの宣言
private var instance: StatefulContext? = null// インスタンス取得
fun getInstance() = instance ?: synchronized(this) {
instance ?: StatefulContext().also { instance = it }
}
}
}
“`## 書き方その2
1番目と同じです
“` kotlin
// シングルトンクラス
internal object StatefulContext {// シングルトンインスタンスの宣言
var instance: Stat
[kotlin] RecyclerViewの実装、クリックイベント付き
#今回やること
今更だけど kotlin でRecyclerViewを実装する。(自分用の備忘録としてほしかった)
クリックイベント処理の記事が少なかったのでタップしたらトーストを表示するのものを作ってみる。
これ↓!
#RecyclerViewの配置
android studio のパレットペインを使って Containersの中にある RecyclerViewをレイアウトに追加する。ドラッグしたらプロジェクトにRecyclerViewが追加され依存関係とかも最新のものが自動的に追加される。一応、依存関係
“`gradle:build.gradle
dependencies {
implementation ‘androidx.recyclerview:recyclerview:1.1.0’
}
“`
*
[Android]端末からサーバへ画像のアップロード
##はじめに
Androidで画像をPOSTし、サーバに保存する機能でてこずったため自分の備忘録兼、アウトプットとして書きます。プログラムのお仕事半年もしてないからいろいろおかしいかもしれないけど許してね。###追記
ご指摘を受けました。ありがとうございます!(OkHttp導入・AsyncTask変更済み)
>OkHTTP2はobsoletes扱いです。最新の4.3.1を使うようにしましょう。https://square.github.io/okhttp/changelog_3x/#version-300-rc1
https://square.github.io/okhttp/changelog/##環境
AndroidStudioでOkHttpを利用しています。
##OkHttp導入
* AndroidStudio画面左上の「Android」を「プロジェクト」に切り替え。
* [app]内のbuild.gradleを開く。
* ~~dependencies内に
“`
implementation ‘com.squareup.okhttp:okhttp:2.7.5’
`
[Android]Navigation でどこまで戻るか制御する (Pop To と Inclusive)
# はじめに
`Navigation` ではどこまで戻るかを`Pop To` と `Inclusive` にて制御できます。
今回は実際にサンプルアプリを作成して、どこまで戻るか制御してみたいと思います。| 用語 | 説明 |
| —- | —- |
| Pop To | `Back`ボタンを押したとき、どこの画面まで戻るか指定できる |
| Inclusive | `Pop Up`で指定した画面の1つ前に戻るようにする |# 準備
## `Navigation`をセットアップする
`Navigation` を利用したアプリケーションを作成するための下準備をします。
次の手順で必要なライブラリやクラス、レイアウトを生成していきます。“`groovy:build.gradle(app)
dependencies {
def nav_version = “2.1.0”
implementation “androidx.navigation:navigation-fragment-ktx:$nav_version”
implementat
libtorch を Android でビルドするメモ
https://pytorch.org/mobile/android/#building-pytorch-android-from-source
とりあえず一式ビルドするスクリプトあります(実態は cmake を読んでいる)
## setup
* Android SDK
* Android NDK
* cmake, ninja
* Gradleが必要です. Ubuntu 18.04 で Android Studio をインストールしておくのが楽でしょうか.
“`
export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_NDK=$HOME/Android/Sdk/ndk/21.0.6113669/
# export GRADLE_HOME=$HOME/local/gradle
“`gradle は `GRADLE_HOME`, `GRADLE_PATH` で設定はうまく行かないかもです. PATH で直接 `gradle` が見えるようにしておくのがよさそうです.
また, gradle は特定のバージョンでないとう
【和訳】Refactoring to Kotlin(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)
[Android Dev Summit 2019
Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.](https://codelabs.developers.google.com/ads19/)[Refactoring to Kotlin](https://codelabs.developers.google.com/codelabs/java-to-kotlin/index.html?index=..%2F..ads19)の日本語訳
# 1.ようこそ!
> [このコードラボは、中国語とブラジル系ポルトガル語でも利用可能です]
このコードラボでは、JavaからKotlinにリファクタリングする方法を学びます。また、Kotlin言語の規則とあなたが書いているコードがそれらに従うことを保証する方法についても学びます。
このコードラボは、プロジェクトをKotlinに移行することを検討しているJavaを使用している開発者に適しています。IDEを使用してKotlinに変換する事
桁区切り付きで数値を表示するExtension
`java.text.NumberFormat`を使うだけです。
“`kotlin
// Int用
fun TextView.setNumberWithThousandsSeparator(number: Int, locale: Locale = Locale.JAPAN) {
setNumberWithThousandsSeparator(number.toLong(), locale)
}// Long用
fun TextView.setNumberWithThousandsSeparator(number: Long, locale: Locale = Locale.JAPAN) {
text = NumberFormat.getNumberInstance(locale).format(number)
}// Float用
fun TextView.setNumberWithThousandsSeparator(number: Float, locale: Locale = Locale.JAPAN) {
setNumberWithThou
[Android] ProgressBarの使い方
##使い方
Widget.ProgressBarを追加して、表示非表示を変えるだけで良い。・Widget.ProgressBarを追加
![スクリーンショット (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506451/7fb4788d-f143-2f45-99e9-e0d204c25808.png)表示非表示の切替え
~~~java
private ProgressBar progressBar;
// 表示
progressBar.setVisibility(android.widget.ProgressBar.VISIBLE);
// 非表示
progressBar.setVisibility(android.widget.ProgressBar.INVISIBLE);
~~~##結果
こういうのが表示されれば成功。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506451/51
Retrofit2で共通エラー処理。ついでにローディングの判定
APIで共通のエラーレスポンス(400)などがあり、救う手段もないのでとりあえず「通信エラーが発生しました。」みたいなトーストを適当に出すことありますよね。
APIメソッド全てのステータスコードをハンドリングするのは面倒なのでどこかでまとめたいと思いました。
あまりアーキテクチャとかは意識してません#構成
“`
├── api
│ ├── exampleService
│ │ ├──ExampleApi
│ │ └──ExampleService
│ └── HttpManager
│
└── ExampleActivity
“`
ExampleActivity → ExampleApi → ExampleService → HttpManager
の順でAPIをコールしつつLiveDataを受け渡してHttpManager → ExampleActivity
のようにHttpManagerでパースしたエラーをActivityへLiveData使ってポストします。#実装
##HttpM
Expo × React NativeアプリをAndroidで動かした時、TouchableOpacityのonPressが動かない
Expo × React NativeアプリをAndroidで実機確認した時、TouchableOpacityのonPressが動かなかったので共有します。
# 環境
expo v3.11.7
react-native v36.0.0# 解決方法
“`index.js
import { TouchableOpacity } from ‘react-native-gesture-handler’;
“`としていたところを
“`index.js
import { TouchableOpacity } from ‘react-native’;
“`としたら治りました。
macOS Catalina + Unity 2019.3でAndroidビルド(IL2CPP)に失敗する場合の対処
# 概要
macOS Catalina + Unity 2019.3でAndroidビルド(IL2CPP)に失敗したので対処のメモを残しておく。# 何が起きたか
IL2CPPでAndroid向けビルドをした時に、以下のエラーが発生。>Failed running /Applications/Unity/Hub/Editor/2019.3.0f5/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll (以下略)
# 原因(おそらく)
Android NDK を手動でインストールしたことにより、macOS Catalinaの強力すぎるセキュリティに引っかかってコマンドを実行できなかった。# 対処方法
UnityHubからAndroid NDK をインストールする。(SDKも一緒にインストールされるが)
PreferenceからNDKのパスを設定することを忘れないこと。# 環境
Mac OS 10.15.2
Unity 2019.3.0f5
Androidアプリ開発でのSonarQube~Java~
はじめに
==
JavaでAndroidアプリの開発を行うときにSonarQubeを導入した時の手順を記載していきます。
ミニマムで導入した手順です。
Kotlinはもう少しシンプルにできると思います。環境
==
OS:Windows 10(64bit)
Java:11
Android Studio:3.5SonarQube
==
SonarQubeとは静的解析ツールの一つでJava, Kotlin, Swift, Goなど25以上の言語をサポートしているようです。
JenkinsやAzure DevOpsと連携することでCIツールの強化を図ることができるようです。詳細は[公式ドキュメント](https://www.sonarqube.org/)を参照してください。
導入手順
==
基本的には公式の[Get Started in Two Minutes Guide](https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-gradle/)に沿って行きます。1.SonarQube Serverのイ
[Android] プログレスダイアログ(通信中のぐるぐる)
*2020/1/21追記
API24で実装しています。API26からは非推奨となっているようです。
***********************##実装方法
*非同期処理クラスの処理が終了したらBroadcastによりonReceiveが呼ばれる例を使っている。~~~java
public class MainActivity extends Activity{public ProgressDialog progressDialog_ = null;
@Override
protected void onCreate(Bundle savedInstanceState) {//通信前にダイアログ表示
progressDialog_ = new ProgressDialog(this);
progressDialog_.setMessage(“実行中…”);
progressDialog_.show();//非同期処理クラスを呼び出して通信処理
}
ダークモードとは何か?各OSの設定方法からiOS/Androidアプリの対応方法まで
# はじめに
勉強会をご覧の皆さま
元々のテーマは「10分でわかるダークモード対応」でしたが、あちこち調べているうちにページ数が30を超えてしまい、「**10分ではわからないダークモード対応**」になりました?♂️
20分には収めます
—
# ダークモードとは?
OSシステムレベルで設定可能な、画面表示色の設定です。
![light_and_dark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277107/f057c91a-a01a-d235-7987-c1ff39a6d9f4.png)
Light Modeが従来通りの白基調な画面、**Dark Modeは黒基調な画面**です。—
# 何が明るく/暗くなるの?
特定の何に適用すべきという法則は無いようですが、**閲覧者に見せたいコンテンツ以外のウィンドウ枠、背景など**に対して適用されることが多いようです。
もちろん、メインコンテンツ(テキスト色など)も背景色に応じて調整する必要があります。
—
# ダークモ
カスタムビューの実装でよく使うヘルパー関数を晒す
カスタムビューの実装など、 `onDraw` を継承して描画を自前で行う場合には、自分で描画位置の計算をしないといけないので計算量が多くなりがちです。
そういった場合に自前でちょっとしたヘルパー関数を用意しておくと便利なので、自分が使っている関数を紹介します。
( `Float` のバージョンのみを記載していますが、状況に応じて適宜 `Int` のバージョンなども作ると便利です。)## constrain()
`value` が `min 〜 max` の間に収まるようにする関数です。こいつを一つ挟んでおくことでバリデーションになるので非常に重宝しています。“`kotlin
fun constrain(value: Float, min: Float, max: Float): Float {
return max(min(value, max), min)
}
“`## map()
`srcStart 〜 srcStop` の範囲にある値を `dstStart 〜 dstStop` の範囲に変換します。グラフを描画したいけれど、グラフの座標系と画面上の座標系
LiveData Builderを使ってコードをスッキリさせる
# はじめに
LiveData Builderを勉強したのでメモ代わりに投稿します。# LiveData Builderとは?
`androidx.lifecycle:lifecycle-livedata-ktx`に含まれる拡張機能で、`liveData` 関数内でsuspend関数を呼び出し、LiveDataに値を直接反映させることができます。[Android Developers](https://developer.android.com/topic/libraries/architecture/coroutines)内に解説があります。
また、[こちら](https://codelabs.developers.google.com/codelabs/advanced-kotlin-coroutines/index.html)に公式のコードラボがあります。
# リポジトリ
GitHubからリポジトリ情報を取得してリスト表示するサンプルを[こちら](https://github.com/nanaten/Try_LiveData_Builder)に上げてあります。#