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

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

ECDSA の署名生成・検証を複数言語・環境でどう書くかまとめてみた

## はじめに

楕円曲線DSA (ECDSA) は楕円曲線暗号を利用した電子署名方式で、通信のセキュリティ確保のために広く使われています。様々なプログラミング言語の標準的なライブラリでサポートされているため、言語をまたいで利用することができます。

ただし、実際に言語をまたいで署名生成 & 検証をしようとしてみると API の違いやフォーマット方式によりハマること多々あったため、書き方をまとめておくことにしました。

## この記事に書かれていること

Golang, Node.js, Kotlin, Swift での(できる限り)標準ライブラリを利用した キーペア生成、署名生成・検証方法を記載します。

以降の記述は基本的に ECDSA を前提に書かれています。

**全体的に、エラーハンドリングは省略しているので注意してください。**

## この記事に登場するキーワード

キーワード | 概要
— | —
EC | 楕円曲線、もしくは楕円曲線暗号のこと。
P-256 | 利用する楕円曲線の種類。キーペア生成、署名生成・検証時にパラメータとして指定します。NIST

元記事を表示

【Android-Codelabs】9/36 〜 DataBindingの使い方 〜

2019年にGoogleから,Web上でAndroidを学べるコースが提供されました.([Android Kotlin Fundamentals Course](https://codelabs.developers.google.com/android-kotlin-fundamentals/))
この記事では,そのコースを実際にやってみてアウトプットしてみるといった内容です.
何かツッコミなどあれば編集リクエストかコメントかTwitterでいただければ修正いたします :pray:

#今回学ぶこと
・DataBindingとはなにか
・DataBindingの使い方
・DataBindingを使うと,findViewById()よりも効率的なビューの呼び出しができるということ

これまでは,MainActivity.ktでビューを参照する場合,`findViewById()`関数を使っていました.
シンプルなアプリであればこれでも良かったのですが,複雑なビュー階層がある場合,`findViewById()`はルートから探索を開始して,目的のビューが見つかるまで探索を続けるので,

元記事を表示

Okhttp3でpfx証明書を使う

# はじめに
クライアント証明書を使ってHTTPS通信対応をすることになった時に書いたコードを会社を辞めてソースコードが見れなくなった時用にメモ代わりとして残しておく
何故Okhttpにこだわるかというと、大昔に苦しめられたもんだから大嫌いになったんですよねHttp(s)URLConnectionが
一部書き方が雑な部分や現役バリバリな人には釈迦に説法のような部分もあるかもですがご容赦をいt・・・ボク用のメモだから別にいっか!

# 事前準備
1.main配下(main、resと同じ階層)に「assets」フォルダを作成
2.assetsフォルダ内にpfx証明書を格納(今回は便宜上「hogehage.pfx」とするヨ)
3.「AndroidManifest.xml」にインターネット通信のパーミッションを追加(↓こんな感じ)
追加場所はmanifest間なら問題ないが、activityの間には書くな

“`AndroidManifest
Android でもとりあえず Ubuntu のデスクトップ環境を使いたい(Termux 版)

## 調査中

Xfce が立ち上がらないため、調査中です。。。
LXDE を使用下さい。

## はじめに

先に公開した Android Studio を使うための最低限のデスクトップ環境の構築方法を記載します。
日本語入力もありませんが、その代わり最短で構築できると思います。

## 注意点

デスクトップ環境(LXDEやXfce)のインストールは数時間かかります。
時間を確保してから実施するほうが良いと思います。

## インストール

Play ストア で Termux と XSDL をインストールしてください。
Termux は Linux という OS の一種が動作する環境になります。
Android も OS ですので、OS の上で OS が動作するという、ちょっとややこしい環境になります。
XSDL は画面を担当するアプリケーションです。
Termux はコマンドラインまでしかサポートしませんので、XSDL で画面をサポートしてもらいます。

## Termux の設定

Termux を起動して、以下のコマンドでパッケージ(Linux アプリケーションの倉庫のような

元記事を表示

Android でも Android アプリを開発したい

## はじめに

どれだけの人が Android で Android アプリを開発したいと思っているのか分かりませんが、本記事は Android 上でセルフ開発を行うための環境構築を目的としています。
セルフ開発とは、自身の端末で自身の端末向けのアプリケーションを開発することを指します。
Windows や Mac、Linux などはセルフ開発が出来ますが、Android は少なくとも公式には開発ツールが出てませんでしたのでついやってみたくなり、思い立ったが吉日とばかりに構築してみました。
(とはいっても公式の Linux 版を使用しているのですけれどもね。。。)
まだ構築したばかりですので、もしかすると実際に開発を行うと不備があるかもしれませんが、その辺りはご容赦ください。
何か見つかれば調査して解決方法を書いていきたいと思います。
本記事では Android Studio を最低限の動作を行うところまでを構築します。

なお Android Studio を使うにあたってはスタイラスペンはあった方が良く、100円ショップのでも無いよりはマシです。
Android Studio のメ

元記事を表示

[Android] RecyclerView を用いた横スクロールする ListView の実装

# 何を作ったか
Android でおなじみの ListView ですが、水平方向へのスクロールは出来ません。そこで、RecyclerView を継承して横方向へスクロールする ListView のようなウェジェットを作ります。

# RecyclerView とは?
複数の View を良しなに表示するウェジェットです。かなり自由度が高いので、大抵のものはこれでできます。詳細に関しては、[【Android】RecyclerViewの基本的な実装](https://qiita.com/HideMatsu/items/a9ab48608e4f681d31fe) が詳しいです。

# 完成品
“`java:HorizontalListView.java

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
im

元記事を表示

Activityで定義したメソッドをAdapterで呼び出す方法(interfaceを使用)

## はじめに
今回は、Androidアプリ開発(Kotlin)における、`Activity`で定義したメソッドを`Adapter`から呼び出す方法に関して書いていこうと思います。
具体的な実装としては、`ListAdapter`の`setOnClickListener`メソッドが走るタイミングで、`Activity`で定義したメソッド(Fragmentを表示する)を呼び出すというものになります。

少々前置きが長いため、実装方法について見たい方は[こちらをタップ!](https://qiita.com/drafts/095ba9b8b4be221d03aa#%E5%AE%9F%E8%A3%85%E3%81%AE%E6%B5%81%E3%82%8C)

## 背景
`Activity`で定義したメソッドを`Adapter`で呼び出したい時、[interface](https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/interfaces.html)を使う以外のアプローチとして、

1. `Coroutine`を使

元記事を表示

[ Android ] setFlags()を使って一度に複数の画面遷移

例えば 画面1→画面2→画面3と遷移した後画面3→画面1と戻りたい時がある。そのような時finish()を使うこともできるが、画面が多いとうっとおしくなる。そんな時setFlags()というメソッドを見つけたので使ってみた。

##方法
新たに画面1のアクティビティを起動して、これまでに遷移してきた画面をスタックから削除することで実現できる。

~~~java
Intent intent = new Intent(SubActivity2.this, MainActvity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //この引数は「スタックをクリア」を表す
startActivity(intent);
~~~

##Intent.setFlags()
今回はスタッククリアの引数を使ったが、他にも引数がある。参考URLに乗せておいた。
画面の内容を変えたくなかったので、スタックにある画面1を使いまわす方法も考えたが、画面2,3が残るのが嫌だったのでスタッククリアを使った。

##感想
setF

元記事を表示

ViewGroupでMaxWidthを実現する

`ViewGroup` には `maxWidth` / `maxHeight` は存在しません。素直に `onMeasure` を `override` して実現しましょう。

“`kotlin
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) {
return super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}

measure(
MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)

元記事を表示

【Android】Google Mapsの「赤いピン」のカスタマイズ9種を紹介します(画像付き)

# 概要
Androidアプリ内でGoogle Mapsを表示するときに、デフォルトのマーカー(例の赤いアレ)ではなく自分で用意した画像をマーカーとして使いたかった。
マーカーの画像を変更する方法と、その他カスタマイズする方法もまとめる。

本記事では東京駅に設置したマーカーをカスタマイズしていく。

“`kotlin
override fun onMapReady(map: GoogleMap) {
val tokyo = LatLng(35.6804, 139.7690)
map.addMarker(MarkerOptions().position(tokyo))
}
“`
![tokyo_default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124752/9a3eb38b-c612-4e9d-cf14-17b96377b85f.png)

# マーカーをカスタマイズする
カスタマイズできる項目を以下に示す。

– Position(Required)
地図上のマ

元記事を表示

Android端末1つでDiscordBotを作成し動作させる

「DiscordBotを作ってみたい、だけどPCを持っていない」という人向けにAndroid端末1つでDiscordBotを作って実際に動作させるまでの方法を紹介します。
なるべく初心者向けに説明していますが、Pythonやdiscord.py, Linuxコマンド, Vimコマンドなどの詳しい説明は省略しています。

##動作環境
– Android 9
– Termux 0.90
– Python 3.8.1
– discord.py 1.3.1

#1. Termuxのインストール
TermuxはGoogle Playストアからインストールできます。
https://play.google.com/store/apps/details?id=com.termux

Termuxとはroot化不要でLinux環境を用意することができるエミュレータです。
ここではPythonとVimを使ってDiscordBotを書く方法を説明します。

#2. Termuxでの準備
まずターミナルで以下のコマンドを実行し、aptの更新とPython, Vimのインストールを行います。($はコマンドラ

元記事を表示

【Android-Codelabs】8/36 〜 ConstraintLayoutの使い方② 〜

2019年にGoogleから,Web上でAndroidを学べるコースが提供されました.([Android Kotlin Fundamentals Course](https://codelabs.developers.google.com/android-kotlin-fundamentals/))
この記事では,そのコースを実際にやってみてアウトプットしてみるといった内容です.
何かツッコミなどあれば編集リクエストかコメントかTwitterでいただければ修正いたします :pray:

#今回学ぶこと
・BaseLine Constraintの使い方
・ボタンのチェーンの使い方

#目指す成果物

ここでは前回に引き続き,ConstraintLayoutの使い方②をやっていきます.
前回やった[ConstraintLayoutの使い方①](https://qiita.com/syuheifujita/items/b0ce95a148863d748da4)をみていない方は,[ここから](https://github.com/syuheifujita/android-codeLab-fu

元記事を表示

【Android-Codelabs】7/36 〜 ConstraintLayoutの使い方① 〜

2019年にGoogleから,Web上でAndroidを学べるコースが提供されました.([Android Kotlin Fundamentals Course](https://codelabs.developers.google.com/android-kotlin-fundamentals/))
この記事では,そのコースを実際にやってみてアウトプットしてみるといった内容です.
何かツッコミなどあれば編集リクエストかコメントかTwitterでいただければ修正いたします :pray:

#今回学ぶこと
・ViewGroupの一つである,ConstraintLayoutの使い方
・ConstraintLayoutのメリット

#目指す成果物

ここでは,,タップすると色が変わるクリック可能なテキストビューとボタンビューで構成されています.
それらのレイアウトをViewGroupである,ConstraintLayoutを使っていきます.

![2-3-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24

元記事を表示

[ AndroidStudio ] PMD解析結果の見方

少し前にPMDを導入した。
https://qiita.com/QiitaD/items/7c1e635ff0cc2115d969

見方を調査してみた。

##解析結果
以下が解析結果である。
![スクリーンショット (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506451/b50fd921-8e6f-cabd-9979-ae8bd57b69ad.png)

例ではperformanceというところを見ている。これを開くと冗長な初期化がされていると書いてある。
その下、ビックリマークの横に発生しているクラスと行が書かれている。
試しにスクショの上半分のコードを見て頂くと、TitleActivityの11行目にボタンをnullで初期化しており、これが冗長な分だと示している。

##感想
pmdについて調べてみたが、参考になるサイトはほとんどなかった。どうやらbuildフォルダのoutputに解析結果出す方法がありそうなのだが、見つからず…
今回紹介したものでも役立ちそうなので、しばらくはこ

元記事を表示

【Crashlytics】開発中のクラッシュログで埋もれるのを防ぐ(Android版)

[Firebase Crashlytics](https://firebase.google.com/docs/crashlytics) を使うと、クラッシュログを自動的に収集でき、ユーザーの環境で起こったクラッシュの把握や原因の分析に役立つ。もはやこれなしでは不安になってしまうくらい、イマドキのアプリ開発には欠かせないツールになっていると感じる。

AndroidでCrashlyticsを使っていたところ、デフォルトだとデバッグビルド時でもお構いなしにクラッシュログを収集してしまうようだった。開発中はクラッシュはそれなりに起こるので、そのままだと本当に本番環境でクラッシュしたログが埋もれてしまう。リリースビルドでは有効にしつつ、デバッグビルドでだけCrashlyticsを無効にする方法を説明する。

# 方法

[The Firebase Blog: Firebase Crashlytics, builds and you](http://firebase.googleblog.com/2019/03/crashlytics-versions.html)

↑のブログポストの末尾の「

元記事を表示

ProgressDialogが非推奨のため、ProgressBarで代替する

ProgressDialog が API 26 (Android 8.0) から非推奨となったため、代わりに ProgressBar などを用いて実装を行う必要があります。

Referenceには ProgressDialog クラスがありますが、DialogFragment クラスを継承しただけの独自クラスです。

シンプルに実装できるものがありましたので紹介します。

以下、Kotlinのサンプルコードです。

“`Kotlin:MainActivity.kt
class MainActivity : AppCompatActivity() {

// ProgressDialog クラスはこのあと実装します
private val progressDialog = ProgressDialog.newInstance(“表示するメッセージ”)

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

元記事を表示

ViewPager2とTabLayoutでページコントロール&ページ切り替えを簡単に用意

– スマートフォンアプリを使っているとよく見かけるページコントロールを簡単に作ろうという話です。
– 簡単にという事で、できればPngやJpegといった、用意するのが手間になる画像リソースも省きたいところ。

### ページコントロールってなに?
– よく見かけるこれです↓

||
|:-:|

#### このコンポーネントって・・・
– iOSのHuman Interface Guidelines に定義されている[コンポーネント](https://developer.apple.com/design/human-interface-guidelines/ios/controls/page-controls/)なので、Androidにはありません:expressionless:
– チュートリアルなん

元記事を表示

Groovy2系(Gradle)はコメント中の\uもUnicodeエスケープされる

Groovy2系の文字列リテラルは`\u0000`のように`\u`に続けて4桁の数字でUnicodeエスケープされます。
このUnicodeエスケープは文字列リテラルだけではなく困った事にコメントにも適用されます。なので例えば以下のようなコメントを書くとエラーになります。

“`groovy
// C:\upload
“`

この動作は以下のバグレポートによるとバージョン2系のパーサーはunicode readerでソースコードを読み込むので発生するとコメントされていました。つまり文字列やコメントだけではなくコードすべてに対してUnicodeエスケープしているという事です。

– [Certain string(s) in comments cause General error during parsing: Did not find four digit hex character code.](https://issues.apache.org/jira/browse/GROOVY-8395)

バージョン3系ではパーサーが新しくなりコメントに`\u`を含めることができます。

元記事を表示

細かいことはいいから特定のAPIエンドポイントのOkHttpログをtailする

Androidの開発をしてると、特定のAPIに対するリクエストとレスポンスを確認したいことって、あると思います。

普通にlogcatを眺めるだけだと、目的外のログもぶわぁーって出てしまって涙目ですよね。

皆どうしてるんですかね?私はこうしてます。(pidcatを利用)

以下、`v1/users/register` というパスを含むリクエストとレスポンスを確認するとします。

### リクエストを確認

##### コマンド
“`
pidcat com.sample.package -t OkHttp | awk ‘/–>.*v1\/users\/register, /–> END/’
“`

##### ログ

“`
OkHttp D –> POST https://api.sample.com/v1/users/register http/1.1
D Content-Type: application/json; charset=UTF-8

元記事を表示

[Android]XMLファイルに記述したオブジェクトを読み込む

# はじめに

Android では `res/xml` フォルダ に任意の XML ファイルが作成できるようになっており、
ここに XML ファイルを作成し、格納しておけば、簡単に読み込めるようになっています。
今回は この XML ファイルに記述したオブジェクトを読み込む方法について説明します。

“`Kotlin
val parser = applicationContext.resources.getXml(R.xml.user_list)
parser.getAttributeBooleanValue …
“`

# 永続化するオブジェクト(クラス)を作成する

永続化するオブジェクトは次の `Person` クラスのオブジェクトにします。
`Person` クラスは 名前(String) と 年齢(Int) 、アイコン(リソースID)を持つクラスです。

“`Kotlin:Person.kt
data class Person(val name: String, val age: Int, val iconRes: Int)
“`

# XML

元記事を表示

OTHERカテゴリの最新記事