Android関連のことを調べてみた2021年03月20日

Android関連のことを調べてみた2021年03月20日

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.apk

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1

WARNING: 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 VRICOH 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機器連携が解禁されています

元記事を表示

android:gravityとandroid:layout_gravityの違い

# `android:layout_gravity`

`android:layout_gravity`は「**レイアウト内での位置**」を指定するときに使います。

レイアウト内の各ウィジェット(レイアウト)に対して、個別に設定していきます。

– 親レイアウト(水色背景) -> `LinearLayout`
– Button01 -> `android:layout_gravity=”end”`(`LinearLayout`の右に配置)
– Button02 -> `android:gravity=”end”`(テキストが右に移動(後述))
– Text001 -> `android:layout_gravity=”end”`(`android:layout_width=”match_parent”`で横幅いっぱいになっているので、変化なし)
– Text002 -> `android:layout_gravity=”end”`(`LinearLayout`の右に配置)
– 子レイアウト(白背景) -> `android:layout_gravity=”center”`(`Li

元記事を表示

Flutterを2ヶ月独学して初めて作ったAndroidアプリとつまづいた点

[モバイルアプリ開発は、Flutter一択なのか?\-2021版\- \- Qiita](https://qiita.com/tetsukick/items/ed9306276942c34b3575)という記事をきっかけに作ったAndroidアプリとつまづいた点について書いていきます。
# どんなアプリ?
|トップページ|詳細画面|
|—|—|
|![main_japanese_width500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49529/bfcb6d8b-3040-536b-606d-53282e5f0a5a.png)|![detail_japanese_width500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49529/bd92af70-076f-5d2f-269e-96f5c0ed2314.png)|

そろそろ散髪に行かないと……今まで何日ぐらいの間隔で行ってたっけ?
オナ禁してる

元記事を表示

herokuを定期的に自動deployして、ペットの様子を監視できるLINE botを作った

# はじめに
義姉夫婦が旅行に行く間、ウサギ(そらちゃん)を預かることになった。
旅行中もお義姉さんがそらちゃんを近くに感じられるように、
メッセージを送ったら、そらちゃんの現在の様子を確認できるbotを作った。

# こんな人向け
– LINEmessagingAPIを使って開発したい人
– LINEmessagingAPIとHerokuを連携してみたい人
– line-bot-sdk-pythonを使用して開発をしてみたい人

# 様相技術
– Python
– line-bot-sdk-python
– heroku
– macOS
– Android
– Selenium

# 方法
だいたいこんな感じ
![udsuds.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/6989bbbd-399d-a189-3457-e6293decee9c.png)

1. droidcamで兎を常時撮影
2. 5分毎に映像のスクショを撮影
3. Herokuにdeploy
4. 義姉がメッセージ

元記事を表示

[Android] Jetpack ViewBinding

Android Studio 4.1.2(windows版) で動作検証してます

ViewBindingを採用することで各コントロールをfindViewById()で呼び出さなくてもよくなりました
Android Developerの説明にある通りnullや型の安全性があるので積極採用する流れになると思います
※ActivityやFragmentでコントロールのIDに重複が無いように定義する必要があります

ViewBindingはAndroid Developerの説明で十分理解ができるかとは思いますが軽く説明してみます

Android DeveloperのViewBindingの説明は以下です

https://developer.android.com/topic/libraries/view-binding?hl=ja#java

## ViewBindingを使用するための設定
build.gradleに以下を追加します
ViewBindingを有効にするとBindingクラスが自動生成されます

“`build.gradle
android {
viewBin

元記事を表示

[Android] ボタンイベントのベスト実装パターンを模索

Android Studio 4.1.2(windows版) で動作検証してます
Javaでの実装中心の話となってます

Androidでボタンイベントを実装する方法はいくつかあります
みなさまはどの実装パターンを採用しているでしょうか?
すでにいろいろな方が同じような内容をまとめてくれていますが
実装に迷っている方もいるかもしれませんのであえてこちらでまとめています

Android DeveloperのButtonの説明は以下です

https://developer.android.com/guide/topics/ui/controls/button?hl=ja

## findViewById()でボタンを取得し直接setOnClickListener()で実装(匿名クラスで実装)
Activity/Fragmentで実装方法がほぼ同じなため
onCreate()あたりで以下のような実装をするパターンが多いのではないでしょうか?
私も脳死状態でよくこのパターンをコピペで実装してしまってます

“`Java:Java
findViewById(R.id.button).set

元記事を表示

Android Studio ToDoListアプリ制作(動画有り)

今回はToDoListアプリを制作しました。
YouTubeに作っている動画をアップしています。

“`xml:strings.xml

ToDoListApp
タイトル:
内容:
登録
登録しました
登録出来ませんでした

タイトルを入力してください

元記事を表示

プラグインによりjcenterへの依存が追加されることへの対処方法

BintrayやJCenterがシャットダウンされることになり、[jcenter, bintray 廃止で自分のAndroidアプリに対応したことのメモ](https://qiita.com/takke/items/67a7f21cdcec0f13d7c8)を参考に調査していた際に、jcenterにだけ存在するライブラリが含まれていても、エラーにならないことがあったので、原因を調査しました。

## jcenterの参照が外れない原因
担当しているアプリでは[groupie](https://github.com/lisawray/groupie)(移行してくれ頼む〜〜:bow:)を利用しているため、jcenterの依存を除外するとエラーになる想定でしたが、エラーになりませんでした。

“`diff:jcenterの除外
repositories {
mavenCentral()
google()
– jcenter()
}

“`

“`shell:実行してもエラーにならない.
$ ./gradlew assemble –refresh-depende

元記事を表示

[Android] (覚書)Jetpack NavigationとViewModelを採用した新規アプリ作成時のチートシート

Android Studio 4.1.2(windows版) での流れとなります

業務上他のプラットフォームの対応があったりでandroidの開発を継続的にできないので
ついど忘れしちゃいそうな予感のため覚書としてまとめました

Android DeveloperのJetpack Navigationの説明は以下です

https://developer.android.com/guide/navigation/navigation-getting-started?hl=ja

## 新規プロジェクト作成
新規プロジェクト作成でEmpty Activity を選択します

## navigationの作成
navigationフォルダを作成します

Android Resource Directory を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524204/b7268791-db3c-267d-3aa5-3884e4d99981.png)
Resource type でna

元記事を表示

【Kotlin 初心者】bindingでidを取得する方法

## bindingでidを取得する方法
Kotlinでxmlのidを取得する際にfindViewByIdを使ってないですか?
findViewByIdよりもbindingならidの取得が楽になります

– アプリのbudild.gradleをにViewBindingをtrueにします

“`build.gradle

android {
viewBinding {
enabled = true
}
}
“`

– bindingを初期化

“`MainActivity.kt

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// bindingを初期化します

元記事を表示

バインディング式でクリックイベントを取得する

DataBindingのバインディング式で、クリックイベントを取得する方法です。

# `android:onClick`属性を設定する

クリックイベントを取得したいウィジェットに、`android:onClick`を指定します。

“`xml
// 引数のViewなし
android:onClick=”@{() -> viewModel.clickText()}”
// 引数のViewあり
android:onClick=”@{viewModel::clickButton}”
// バインドされているデータを渡す
android:onClick=”@{() -> viewModel.clickText(model)}”
“`

“`ViewModel.kt
// android:onClick=”@{() -> viewModel.clickText()}”の処理
fun clickText() {}

// android:onClick=”@{viewModel::clickButton}”の処理
fun clickButton(view: View) {}

// a

元記事を表示

【Kotlin 初心者】DataPikerで日時表示する

## イメージ
Kotlinで簡単にiPhoneみたいな表示で日時を表示することができます

## 実装
コードはいけてないとこありますが、ご容赦を、、、

“`MainActivity.kt

package com.example.datapicker

import android.app.AlertDialog
import android.app.DatePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {
override fun onCr

元記事を表示

OTHERカテゴリの最新記事