Android関連のことを調べてみた2020年12月31日

Android関連のことを調べてみた2020年12月31日

More than one file was found with OS independent path ‘lib/arm64-v8a/libopencv_java3.so’. エラー回避備忘録

## 概要
出くわしたエラー

“`
More than one file was found with OS independent path ‘lib/arm64-v8a/libopencv_java3.so’.
“`

きちんとopencvをcmake から読み込んで動的リンクをしているはずなのだが、このエラーが出てしまう。

## 解決法
`app/gradle`

“`
externalNativeBuild {
cmake {
path “src/main/cpp/CMakeLists.txt”
version “3.10.2”
}
}
sourceSets {
main {
jniLibs.srcDirs = [‘src/main/libs’]
}
}
“`

とする。

なぜ解決するかは完全には理解していない。。

元記事を表示

boost をandroid ndk でビルドする備忘録

## 概要
boost をndkでプレビルドしてからandroid studio上でリンクする。

## 手順
https://github.com/moritz-wundke/Boost-for-Android
ここを基本的にフォローする。

必要なandroid ndk をダウンロードする必要がある。
古いバージョンはunsupported versionのところからダウンロードする必要がある。

また、`./build-android.sh`
の中にビルドするboost のバージョンがハードコードされているため、
これを先ほどダウンロードしたndkのバージョン、gitに記載されている対応表をみて、
バージョンを適宜ハードコードし直す。

元記事を表示

【Android】MockK の設定でハマったこと

[MockK](https://github.com/mockk/mockk)を使ってテストコードを書いていた時に、いくつかエラーでハマったことがありました。
どのようなエラーが起きて、どう解決したのかを備忘録として残します。

# java.lang.UnsupportedClassVersionError

テスト実行時、以下のエラーが出て実行に失敗することがあります。

“`
java.lang.UnsupportedClassVersionError: io/mockk/proxy/jvm/dispatcher/JvmMockKDispatcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

at java.lang.ClassLoader.findBootstrapClass(N

元記事を表示

ceres-solver を android ndk でビルドする備忘録

## 概要
android ndk で ceres-solver をビルドし、liceres.a が欲しかった。
それをアプリケーションにnative build する際にリンクさせる必要があった。

## ceres-solver バージョン確認
ceres-solver は様々なバージョンがあり、1.12, 1.13, 1.14, 2.0 系などがある。
それらをgithubのリリースから取得。

## ndk バージョン確認
ndk download と検索し、ndk(現在は22系が正式サポートされていた)
の必要なバージョンをダウンロードする。(前のバージョンはunsupported versionみたいなところから取得できる。現在は10e系が一番古いものとしてアーカイブに残っていた。)

## ceres-solver のバージョンと ndkのバージョンを確認
試した感じでは、

ceres 1.12 系は、ndk 10系あたりだとビルドできた。
ceres 1.14 系は、ndk 14系あたりだとビルドできた。
ceres 2 系は、 ndk 21系あたりでビル

元記事を表示

Ionic Vue のアプリをスマホ(Android)で実行する(Windows 10)

Ionic(知らないのでさっき調べた)、Vue.js(チョットサワッタコトアル)、TypeScript(Java とかみたいなものでしょ?)レベルの人が Ionic Vue で作成した適当なアプリをスマホ(Android)で動かすまでの流れです。

Ionic は今までWebアプリを作成してたような感じでデスクトップアプリやモバイルアプリを作成することができるフレームワークです。例えば Vue.js でWebアプリもデスクトップアプリもモバイルアプリも作成できます。

2020年10月に Ionic Framework の Vue.js 版である Ionic Vue がリリースされました。

[Ionic Vue](https://ionicframework.com/jp/docs/vue/overview)

#1. 開発環境
Windows 10
Node.js 12.16.1
Android Studio 4.1.1
実機のスマホ:Android 10

#2. 手順

##2.1. Node.js をインストール
Node.js のサイトからダウンロードしてインストールします

元記事を表示

flutter実行時Android Emulator上で起きるエラー”Error connecting to the service protocol: failed to connect to http://127.0.0.1:1029/89AGRYqn_pA=/”の解決法

flutterが最近熱いらしいので、Androidエミュレータ上でサンプルプロジェクトで遊んでみようと思ったところ、

“`
Error connecting to the service protocol: failed to connect to http://127.0.0.1:1029/89AGRYqn_pA=/
“`
こんなエラーが出て長時間詰まってしまいました。Stack Overflowでも多くの人が同じ問題に陥ってるっぽいです。備忘録のために、試したけど効果がなかった方法と、エラーを回避できた解決法を書いていきます。

ちなみに自分の環境はこんな感じです↓
IDE: Visual Studio Code
OS: mac OS Catalina
Android Emulator: Pixel 2 API 29

#試したけどダメだった方法
### 環境変数にexport NO_PROXY=localhost,127.0.0.1を追加
これで直ったという記事がありましたが、自分の場合は試しても直りませんでした。
### IDE再起動、エミュレータ再起動、flutter

元記事を表示

【2020年版】FlutterのHelloWorldをAndroidでやってみる

先日iOSシミュレータでFlutterアプリのHelloWorldをしたので、今回はAndroid StudioでHelloWorldしてみます。

## Android Studioのアップデート

僕のAndroid Studioがばーバージョン3.3と古かったので最新にアップデートします。

Eventsをクリック。

`update`をクリック。

【Android】Context って何??

# はじめに
Contextについて自分なりに調べて学んだので記事に残します。

きっかけとして、
Android開発をしていて、何も考えずにContextをメソッドの引数に渡しまくっていたところ、リードエンジニアにこのようなレビューを受けたことがある。
>Contextの過剰摂取には気をつけましょう。
いつの間にか抜け出せなくなっていずれ手のつけようがなくなってしまいます。
引数にContextを追加したら負けぐらいの気持ちでContextを引数に追加しないことを意識したほうが良いです。

そこで「Contextって何??」っと思って色々調べた。

# そもそも Context とは??
#### 日本語の意味的なContext
>(文章の)前後関係、文脈、脈絡、背景、状況、環境

などと出てくる

#### プログラミングにおけるContext
こちらのサイトから抜粋
http://e-words.jp/w/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.html

>プログラミングの分野でも、同じコード記述やプログラム

元記事を表示

非推奨のAPIを使用またはオーバーライドしています

#何が問題か
android環境下でflutter runしたら
「非推奨のAPIを使用またはオーバーライドしています」となった。

#解決策
minSdkVersion を21から23に変更

元記事を表示

Kotlinアプリ開発はじめます

####~目次~

[1.はじめに](#1.はじめに)
[2.概要](#2.概要)
[3.開発環境](#3.開発環境)

##1.はじめに
はじめまして、たけしです。
KotlinでAndroidアプリ開発を始めました。
プログラミングの学習は趣味で少しばかりしていましたがアプリ開発ははじめてです。
よろしくお願いします:)

##2.概要
AndroidStudioで開発を始めたのですが、開始早々行き詰ってばかりです。
(調べても出てこないorでてきても英語ばかり、、)
そんなわけで同じ悩みを持つ方を減らすため、また備忘録としても僕が直面した問題を中心に記事を投稿していけたらなと思っております。

Webで何かを投稿するのはこれが初めてなので、文章も拙いかもしれませんが、温かい目で見守っていただけたら嬉しいです。
(改善点などコメントしていただけたら嬉しいです!)

##3.開発環境
何のせたらいいかわからないので現在の開発環境をのせておきます。

– Surface Pro6(Windows10)
– Android Studio(4.1)

(開発環境も何書けばいいのかわから

元記事を表示

(Android) DataBindingを使って静的テキストを表示させてみる

## はじめに
DataBindingの勉強として記録しておく。
今回はテキストを表示するだけの初歩中の初歩。

## DataBindingの導入
appのgradleに以下を追加

“`java:build.gradle
android {
dataBinding {
enabled = true
}
}
“`
## バインドするクラス(User)を用意

“`java:User.java

public class User {
private String name;
private String email;

public User(String name, String email) {
this.name = name;
this.email

元記事を表示

RadioGroupを使ったRadioButtonの双方向データバインディング

双方向データバインディングが必要になって調べたので、備忘録として残しておきます。

# 双方向データバインディングとは
Databindingは、レイアウトファイルに画面に表示するデータをバインド出来る機能のこと。
もう少し乱暴に言うと、あるデータを使うようにレイアウトのxmlファイルでよしなに定義しておいて、アプリ実行時にそのデータをレイアウトにまるっと渡すと、表示に反映する部分のコードを書かなくて良くなるというちょっと便利な手法です。
あんまりやりすぎると逆に可読性下がるのでやり過ぎは注意ですが、便利なので慣れるととても使い勝手が良い機能です。特にLiveDataと組み合わせると、プログラム内で変更した値の表示を反映させるコードを書かずとも反映されるようになるため非常に便利です。

しかし、これは基本的に「表示するデータ」を指定するもので、アプリならばたいていはユーザーからのアクション、入力を何かしら受け付ける画面があると思います。
そんなとき、ユーザーが入力したデータもまた、LiveDataに自動的に入れたいなーという時に使うのは、「双方向データバインディング」です。**データ→

元記事を表示

僕たちはどのようにしてViewModelに通知すべきなのか

# はじめに
みなさま、値の受け渡しはどうしてますか?
私は去年までベタベタな組み込みC言語ユーザで、戻り値、参照渡しくらいしか使っていませんでした
当然、非同期的なやりとりをしようとすると詰みます

ということで私なりに整理したものを共有したいと思います
テーマは、「どのようにしてModelからViewModelに通知すべきか」、です

さて、Androidで一般的なMVVMアーキテクチャでは、アプリケーションはおよそ3層で表現できます
![スクリーンショット 2020-12-28 8.53.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924658/bef99e92-bdf1-71f3-909a-b8fee3b68d40.png)
この時、ViewModelからActivityへの通知はLiveDataを使うのが公式です
LiveDataには通常のObserverに加えて、Activityのライフサイクルを与えられるので、
ViewModelが値を返すときには既にActivityが破棄されてい

元記事を表示

managed Google Playを利用している他組織へアプリの限定公開

この記事は [CBcloud Advent Calendar 2020 22日目](https://qiita.com/advent-calendar/2020/cbcloud)の記事です。

CBcloud 徳盛です。
Kotlin Coroutineの記事を書こうと思いましたが、ちょっと年が明けそうなので一旦保留して、あまりこんな機会ないであろう、最近あった他組織へ限定公開する方法を書きます。

# 背景
managed Google Playを利用している組織から、弊社アプリを組織内で配信したいという話があったので調べた。

# 方法
1. リリース前にGoogle Play consoleの「詳細設定」より「managed Google Play」タブを選択し、「オンにする」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124149/451ea191-8e70-ddfa-077b-4a032c374367.png)

2. 非公開アプリへのアクセス権より組織を追加し、

元記事を表示

AndroidのChromeでリンクを押した時につく、青色を消す。

AndroidのChromeでリンクやボタンを押した時、リンク領域が青色になる。
これは、タップ時のハイライトカラーを透明にすることで解消できる。
全てのセレクタに適用して、解決した。

Android

“`css:style.css
* { -webkit-tap-highlight-color: rgba(0, 0, 0, 0) }
“`

元記事を表示

【Android】RecyclerView で無限スクロールを実装する

# やりたいこと

RecyclerView で作ったリストに無限スクロールを実装してみます。

API でデータセットを取得してリスト表示するような機能を想定しています。

画面生成時にリストを 10 件しておき、リストの下端までスクロールしたタイミングで 10 件ずつ追加で表示するサンプルアプリを作っていきます。

最終的に作成したアプリは Github で公開していますので参考にしていただければと思います。

https://github.com/yudai0308/infinite_scroll_sample

# 実装手順

## 1. レイアウトファイル作成

RecyclerView のレイアウトと、リストに表示させる1行分のレイアウトを作成します。

“`activity_main.xml

元記事を表示

Kotlin の Coroutine で suspend 関数を理解する

先日、[ドリーム・アーツ](https://recruit.dreamarts.co.jp)では、[売場ノート](https://shoprun.jp)というアプリを Android に対応させた。

全面的に Coroutine を使って非同期処理を書いたので、そのとき理解のために実験した内容について備忘がてら書いておく。

## 前提

Kotlin 1.4.21
Android Studio 4.1.1

“`gradle
dependencies {
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9’
}
“`

## Coroutine の動作をおさらいする

launch とか async/await がどういう順番で呼び出されるかといったことはここでは話題とはせず、Coroutine の利用シーンに絞って、Android アプリ内でどのようにコードが動くのかといったことを記述する。

Coroutine の典型的な利用シーンとして、何らかのユーザーの操作をトリガーとして

元記事を表示

KotlinでRoomデータベース

KotlinでRoomデータベースを使用してみたので、覚書。

全コード:
https://github.com/CoffCookie/memo

Roomとkaptが必要だったため、2つを指定。

最新版は下記

Room:
https://developer.android.com/training/data-storage/room?hl=ja

kapt:
https://kotlinlang.org/docs/reference/kapt.html

私の場合、kaptはversion指定すると上手く行かなかったため、version指定なしで作成している。

“`app/build.gradle
plugins {

id ‘org.jetbrains.kotlin.kapt’
}

dependencies {

def room_version = “2.2.5”
implementation “androidx.room:room-runtime:$room_version”
kapt “androidx.room:r

元記事を表示

[Jetpack Compose] 1.0.0-alpha09から変わったこと。

## おすすめ

– Android Studio Arctic Fox Canary 2
– https://developer.android.com/studio/preview

前はBetaバージョンを使ってましたが、
最近のバージョンにはCanary Buildに変わって使いましょう。
ComposeのPreviewはAndroud studio Beta Buildバージョンでは使わなくなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/b08ca87a-108d-106a-d699-93edd743d9d0.png)

## Lib Version

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/a3d3c76a-51fc-f6f3-42ce-5e77b85eb3d2.png)

https://mvnrepository.co

元記事を表示

【Dart】Mapのvalueを使ってソートする

Mapのvalueでソートしたい事があったので調査しました。

[SplayTreeMap class](
https://api.dart.dev/stable/2.10.0/dart-collection/SplayTreeMap-class.html)
SplayTreeMapのfromにソートしたいmapとcompareを渡せばソートできるみたいです。

下記のようなオブジェクトを作成しました。属性idでソートする予定。

“`Dart:Object
class Employee{
int id;
String name;
Employee(this.id,this.name);
}
“`
最初の並び順は下記の様な感じです。

“`Dart:unSort
Map map = Map();
map[‘hoge’] = new Employee(1, “sato”);
map[‘huga’] = new Employee(3, “tanaka”);
map[‘piy

元記事を表示

OTHERカテゴリの最新記事