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

Android関連のことを調べてみた2021年09月12日
目次

NDK at /Users/user.name/Library/Android/sdk/ndk/XX.X.XXXXX did not have a source.properties file エラーが発生する

# やりたいこと
Androidアプリをビルドしたい。

“`
./gradlew build
“`

# エラー文
以下のエラーが発生。

“`
❯ ./gradlew build

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ‘:renderscript-toolkit’.
> com.android.builder.errors.EvalIssueException: NDK at /Users/user.name/Library/Android/sdk/ndk/21.3.6528147 did not have a source.properties file

* Try:
Run with –stacktrace option to get the stack trace. Run with –info or –debug

元記事を表示

DocumentsProviderについて調べた

# 概要

この記事は、AndroidのDocumentsProviderについての概要をまとめた内容です。

SMB/CIFSの共有フォルダにDocumentsProviderを介してアクセスするためのアプリ、「[CIFS Documents Provider](https://play.google.com/store/apps/details?id=com.wa2c.android.cifsdocumentsprovider)」を開発するに当たり、調べた内容になります。

# Storage Access Framework とは

Androidには、Android4.4より導入された[Storage Access Framework (SAF)](https://developer.android.com/guide/topics/providers/document-provider)という仕組みがあります。SAFは、ストレージサービスに対する共通のインターフェースを提供する仕組みです。このSAFを介することで、クライアント(アプリ)はローカルでもリモートでも共通のインター

元記事を表示

Jetpack Composeでテキストの中にアイコンを埋め込んで表示させる

Jetpack Compose では簡単にテキストの中にアイコンを埋め込むことができたので紹介しようと思います。

## 実装コード

早速サンプルコードから

“`kotlin
@Composable
fun Example() {
val iconId = “iconId”
Text(
text = buildAnnotatedString {
appendInlineContent(iconId)
append(“Hoge”)
appendInlineContent(iconId)
append(“Fuga”)
},
inlineContent = mapOf(
iconId to InlineTextContent(
placeholder = Placeholder(
width = 24.sp,

元記事を表示

【Android】+Buttonを長押して高速カウントアップ in Kotlin

# ➊ はじめに
「**イベントのハンドリング**」と「**ハンドラによる周期処理**」の基礎を勉強したので、これを用い、よくある「**+Button長押して、高速カウントアップ**」みないな UI を作ってみました。

# ➋ どんな感じ?
百聞は一見にしかずということで、こんな感じ~になります。

## (1) イメージ
「`TextView`」1個と「`Button`」3個のシンプルなアプリです?

## (2) アプリの仕様
– `+`ボタン押下:カウントアップ
– `+`ボタン長押し:高速カウントアップ
– `-`ボタン押下:カウントダウン
– `-`ボタン長押し:高速カウントダウン
– `CLEAR`ボタン押下:カウント0クリア
– Acitivityを廃棄してもカウンタは引き継がれる
– カウンタは0未満にはなら

元記事を表示

【Flutter】社内向け入門講座の内容公開

インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)

## 本記事で伝えること
– Flutterを用いた簡単なアプリ開発デモ
– 開発効率をあげるTips
– デバッグ方法
– おすすめパッケージ
– アーキテクチャ紹介
– やっておいたほうが良いこと
– 知っておいて損しないこと
– 情報収集源

## 本記事を読む前に
本記事を読む前提として以下を実施済みですと、より内容が理解しやすいかと思います。
– Flut

元記事を表示

【Android】Handlerによる周期処理 in Kotlin

# ➊ はじめに
Androidで、Handlerによる**周期起動**の方法を調べました。

# ➋ どんな感じ?
百聞は一見にしかずということで、こんな感じ~になります。
「`TextView`」のみのアプリです?

周期起動でどんどんカウントアップしていきます。

# ➌ お勉強ポイント
– **Handler**を使用した周期起動の方法

※周期起動の方法はいくつかありますが、ここでは**Handler**を使う方法で実装します。

# ➍ 周期起動の仕組み
**Handler**を使用して、周期起動を行うと言いましたが、詳しくは以下3つの機能を使用します。

– **Looper**:Looperは無限にループしながら自分が属したスレッドのMessage Queueに入ってきたMessageやRunnableオブジェ

元記事を表示

Tweet Web IntentでAndroidから投稿画面を呼び出す

アプリから簡単にTwitterに投稿できる方法はないかなーと?とググってあったのでメモついでに。
参照したサイトはこちら
[イクログ – [Twitter] Tweet Web Intentを使ったツイートボタンの作り方・パラメータ一覧](https://blog.ikunaga.net/entry/twitter-com-intent-tweet/)

知ってる人にはなんてことない方法ですが、やることは簡単で、URLのインテントを作って呼び出すだけ。
URLでできることなので、Androidじゃなくても、いろいろなところで使えますね。

“`kotlin
val uri: Uri = Uri.parse(“https://twitter.com/intent/tweet?text=hello world%0D%0A&hashtags=test”)
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(packageManager) != null) {
startActivity(in

元記事を表示

AndroidでHiltをつかう(その2)

Androidで主に使用される依存性注入は、コンストラクタインジェクションとフィールドインジェクション。

## インジェクションの基本
1. Applicationクラスに「@HiltAndroidApp」をつける(Hiltが使用可能になる)
1. フィールドインジェクションされたいクラスに「@AndroidEntryPoint」をつける
1. フィールドに「@Inject」をつける(フィールドインジェクション)。lateinit宣言も必要
1. バインディングしたいクラスのコンストラクタに「@Inject」をつける(コンストラクタインジェクション)

(注意1)
エントリポイントとは、Hilt が管理するコードとそうでないコードの境界
(注意2)
@AndroidEntryPointを付ける場合は、それに依存するAndroidクラスにもアノテーションを付ける必要がある。たとえば、フラグメントにアノテーションを付ける場合は、そのフラグメントを使用するアクティビティにもアノテーションを付ける必要がある

## HiltでサポートされているAndroidクラス
| クラス名 ||
|:-

元記事を表示

iOSとAndroidを区別するのに便利なJavaScript置いておくね

“`
var isAndroid = (UA && UA.indexOf(‘android’) > 0) || (weexPlatform === ‘android’);
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === ‘ios’);
“`

これは基本的にユーザーエージェント(UA)を見て正規表現でandroidかiOSかを判別しています。`UA &&`の部分はnullチェックですね。UAの値を取得できなかった時にエラーで落ちないようにしています。

日本のスマホのシェアはAndroidとiOSが99%を占めているので上記以外はその他で例外処理をしてしまって良いでしょう。

元記事を表示

エミュレーターの画面を録画する(+gidに変換してQiitaに上げられるようにする)

AndroidStudioではLogcatの`Screen Record`からエミュレーターの操作をキャプチャできます。
のですが、どういうわけかこんな風に画面がチラつきまくってまともにキャプチャできない! 困った!
![RecordFailed.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/1d47ee28-45b8-4ee2-4548-a1c678928294.gif)

# Win+Alt+Rで録画する
というわけでショートカットキー`Win+Alt+R`からキャプチャをしていきます。
録画がスタートすると次のような録画コントローラーが表示されます。
録画.png
**録画開始時にアクティブなウィンドウのみ

元記事を表示

BroadcastReceiver を unregisterReceiver する際に java.lang.IllegalArgumentException: Receiver not registered が出るので修正する

# 概要
Android アプリ開発で、(実装がまずくて)BroadcastReceiver の unregister 時に例外が起きたので対応内容を書きます。

## java.lang.IllegalArgumentException: Receiver not registered
ContextImpl に register していない BroadcastReceiver インスタンス(null 含む)を unregister しようとするとこの例外が出ます。

“`
Caused by: java.lang.IllegalArgumentException: Receiver not registered: jp.toastkid.music.MediaPlayerService
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1555)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1789)

元記事を表示

【Android】Button押下イベントのハンドリング in Kotlin

# ➊ はじめに
Androidで、入力イベントをハンドリングする方法を調べました。

# ➋ どんな感じ?
百聞は一見にしかずということで、こんな感じ~になります。
「`Button`」のみのアプリです?

※結果は、`Logcat`で見てください。

# ➌ お勉強ポイント
以下の代表的なものについて実装してみたいと思います。

– クリック
– ロングクリック
– タッチ ( 押す、離す、移動する)

※詳細はこちら?「[入力イベントの概要](https://developer.android.com/guide/topics/ui/ui-events?hl=ja)」

# ➍ Button押下イベントのハンドリング
例えば「クリック」の場合、イベントを受け取るために「setOnClickListener()」メソッドをコ

元記事を表示

【MPAndroidchart】 棒グラフの横軸を動的に変更したいときに頭に入れておくとよいかも?な点

##概要
Androidアプリ [ツケ台帳](https://play.google.com/store/apps/details?id=com.chelak.tsuke_daicho) のツケ金額の解析画面を作る際、
MPAndroidの棒グラフ横軸を動的に変更(要素数に合わせて本数変更)したのですが、
若干詰まったのでメモ
アプリの解説、過去の投稿は→[こちら](https://qiita.com/n_ku/items/de1675af32ca53acc562)

MoshiをKotlinで使う

Kotlinで、[Moshi](https://github.com/square/moshi)を使う場合の方法を記載します。

“`gradle:app/build.gradle.kts
implementation(“com.squareup.moshi:moshi-kotlin:1.12.0”)
kapt(com.squareup.moshi:moshi-kotlin-codegen:1.12.0)
“`

### Adapterの登録を行います。

DaggerなどのDIで、Module化すると楽になります。

“`kotlin
val moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build()
“`

* Hiltを利用した場合

“`kotlin
@Module
@InstallIn(SingletonComponent::class)
class JsonModule {

@Provides
@Singleton
fun provideMoshi

元記事を表示

お問い合わせフォーム メール送信機能の作成

##はじめに
備忘録として、自作アプリに組み入れたお問い合わせフォーをどの様にして作成したのかを記述

##環境

⚫︎OS : macOS Catalina 10.15.7
⚫︎Androidsutdio : 4.2.1
⚫︎Kotlin : 1.5.21

![スクリーンショット 2021-09-09 0.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/fe79af2b-bcf3-4983-0fb8-7d4004914e45.png)

画像の送信ボタンを押すと、
![スクリーンショット 2021-09-09 0.41.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/e127f697-e956-20bd-06fa-67fc6be8eeef.png)

gmailの方でタイトルと本文を受け継ぐ処理をしていきます
※本来、メールの送信先のアドレスも受け渡しますが、個人情報保護

元記事を表示

【Android】Jetpack ComposeでGithubのリポジトリ検索アプリを作ってみる

## 概要

Androiderのみなさま、[Jetpack Compose](https://developer.android.com/jetpack/compose?hl=ja)はもう使いましたか?
今年(2021年)の7月末にようやく安定版(1.0)が出て、界隈でいっそう盛り上がりを増していますね。

今回はComposeを使ってGithubリポジトリを検索するアプリを作成してみました。

## できたもの

https://github.com/alpha2048/JetpackComposeTest

アプリを開くと検索画面を表示し、最初は「Jetpack Compose」で検索します。
リポジトリをタップするとWebViewで該当リポジトリを表示します。
デザインはMaterial Designからグレー色を適当に散りばめてますが、少し配色ミスったかも?

[Unity] Android NativePluginの実装の仕方

# はじめに
Unityで使用するNativePluginのタスクがあったのでとりあえずテストでサンプルを作成してみました。
ここでは、UnityでAndroidのNativeアラートを表示させるまでの忘却録です。

## 準備
macOS Catalina: 10.15.7
Unity 2018.4.19f
Android Studio 4.0.1

## Android Studioでプロジェクトを作成

今回は「AndroidStudio4.0.1」で作成していきます。
![android001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/b27ed595-5ee7-4a67-ebd3-cbaedaff4da0.png)

「Select a Project Template」で「No Activity」を選択
![android002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988

元記事を表示

【Flutter】カウンターアプリに書かれたコメントを解説する

`flutter create` で新しく Flutter プロジェクトを作ると自動生成されるのが「カウンターアプリ」であることは、Flutter を触ったことがある方であればピンとくるのではないかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134943/20a5ec25-afe9-548f-0cff-32bb81fc16d1.png)

Flutter アプリ開発者にとっての初めの一歩とも言うべきカウンターアプリですが、その `main.dart` に書かれているコメントを読んだことがあるでしょうか。私は毎回全置換で消しています。

ただ改めて考えてみると、このコメントも __Flutter フレームワークの開発チームが Flutter アプリ開発者のためにわざわざ書いてくれたもの__ だと思いますので、この記事ではそのコメント全てを翻訳しながらしっかりと内容を確認してみたいと思います。

また、初学者向けの簡単な解説も交えつつ書いていければと思いますので、何かの役に

元記事を表示

API30対応でcookie認証が通らなくなった

## 背景
2021年11月以降、AndroidアプリのAPIレベルを30以上に対応させる必要があります。
漏れなく対応に追われていたのですが、APIレベル29から30に上げたとたん、アプリの認証処理が失敗するようになったのでその調査の備忘録です。

## 調査
認証系なのでcookie周りが怪しい…。
取り敢えずAndroid developerの変更内容を読んでいたのですが、cookie周りの取り回しが変更されたとかは見つかりませんでした。
[Android 10(API レベル 29)から Android 11(API レベル 30)に移行する](https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=ja#pre11)

仕方なしにアプリの実装を追いかけて、API29とAPI30で何が違うのか追っかけてみたところ
CookieManagerのsetCookieにてsecure属性が付与された項目がAPI30ではrequestに乗っかっていませんでした。

なじぇ…と思いながら

元記事を表示

【Unity】AndroidアプリをGooglePlayに公開する

# Unity
下記項目を設定

– 会社名
– プロダクト名
– アイコン
– パッケージ名
– ヴァージョン
– ビルド番号
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/10eb3668-d396-6d72-83e7-b16ea3edbcfe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/669b561b-03a3-b48e-9f26-0d3079903bc6.png)
ARM64にチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/76d5d0dc-4b0e-5933-0e67-80210f71cf4b.png)

キーストアを登録
![image.png](https://qiita-image-store.s3.ap-

元記事を表示

OTHERカテゴリの最新記事