2021年11月04日

gradleエラーその2

Execution failed for task ':app:processDebugMainManifest'.
> Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
エラーメッセージに示される
https://developer.android.com/guide/topics/manifest/activity-element#exported
によれば...▼

続きを読む "gradleエラーその2" »

2021年11月03日

Google ADmob sample bug ?

仮装大賞パネル 無料ジョークアプリ「仮装大賞パネル」へ google admob「アプリ起動時広告」を組み込む為、公式ドキュメント
https://developers.google.com/admob/android/app-open-ads?hl=ja
を参考にサンプルコード
https://github.com/googleads/googleads-mobile-android-examples/tree/master/java/admob/AppOpenExample
commit b54accd1c410a1bf8a5fdcd95a1b19d85d456ca7 (HEAD -> master, origin/master, origin/HEAD)
Date: Wed Sep 22 12:55:50 2021 -0700
をビルド。タイトルから起動時1回限り広告表示を想像させるこのサンプルは...▼

続きを読む "Google ADmob sample bug ?" »

2021年11月02日

アプリの軽微なアップデートをしたところ「非承認」???

 原因は Google Play ストア でのアプリ表示名称の末尾に「Free」が付いていたこと。
最初のリリースはパスしていた為、相変わらず抽象的な原因説明でアップデートに数日・・・。 有料版アプリと区別する為、ストア でのアプリの名称だけを「~ Free」から「~ Mini」に変更してアップデート「承認」。 現在では日本語「~ フリー」も個別に指摘されるので「~ ミニ」へ。
Google Play ストアに掲載するアプリ情報に関するガイドラインを改定します
2021年5月18日火曜日
https://android-developers-jp.googleblog.com/2021/05/updated-guidance-to-improve-your-app-quality-and-discovery-on-google-play.html
価格やプロモーションを示すキーワードを使用しないでください
 アプリケーションコードのパッケージ名称は無関係。

2021年11月01日

突然のgradleエラー

 数日前までデフォルトで新規プロジェクトをビルド出来ていた
Android Studio 4.2.2の Empty Activity
が突然 gradle エラー。
The minCompileSdk (31) specified in a
dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
is greater than this module's compileSdkVersion (android-30).
Dependency: androidx.appcompat:appcompat:1.4.0.
AAR metadata file: C:\Users\wanko\.gradle\caches\transforms-2\files-2.1\b70a38d32b407cc6af29424a07f54027\appcompat-1.4.0\META-INF\com\android\build\gradle\aar-metadata.properties.
 解決方法を調べると...▼

続きを読む "突然のgradleエラー" »

2020年12月23日

Style Sheets + javascript でダークモード

 Webページをダークモードに対応。既存のスタイルシートと新たなダークモードスタイルシートを javascript で切り替えるアプローチ。
 デフォルトでシステム設定に従い、閲覧者の操作でライトモード・ダークモードを選択可能にする最小限の実装例...▼

続きを読む "Style Sheets + javascript でダークモード" »

2020年12月22日

レーダーアニメーション 2

 レーダーと言えば、魚群探知機や戦闘機で搭載される円形のレーダー。レーダーアニメーションの円形版の実装例。

続きを読む "レーダーアニメーション 2" »

2020年12月21日

VirtualDisplay for API 29

VirtualDisplay 実装例」を API 29 の Emulator で実行すると下記ランタイムエラー。
2020-12-21 01:28:56.035 3538-3538/asia.remix.virtualdisplay E/AndroidRuntime: FATAL EXCEPTION: main
    Process: asia.remix.virtualdisplay, PID: 3538
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=450066721, result=-1, data=Intent { (has extras) }} to activity {asia.remix.virtualdisplay/asia.remix.virtualdisplay.MainActivity}: java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
        at android.os.Parcel.createException(Parcel.java:2071)
        at android.os.Parcel.readException(Parcel.java:2039)
        at android.os.Parcel.readException(Parcel.java:1987)
        at android.media.projection.IMediaProjection$Stub$Proxy.start(IMediaProjection.java:231)
        at android.media.projection.MediaProjection.(MediaProjection.java:58)
        at android.media.projection.MediaProjectionManager.getMediaProjection(MediaProjectionManager.java:104)
        at asia.remix.virtualdisplay.MainActivity$1.onActivityResult(MainActivity.java:62)
        at asia.remix.virtualdisplay.MainActivity$1.onActivityResult(MainActivity.java:57)
        at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:377)
        at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:336)
        at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.java:624)
        at androidx.fragment.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
        at android.app.Activity.dispatchActivityResult(Activity.java:8110)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.media.projection.MediaProjectionManagerService$MediaProjection.start(MediaProjectionManagerService.java:476)
        at android.media.projection.IMediaProjection$Stub.onTransact(IMediaProjection.java:135)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)
API 29 から、getMediaProjection()の前に、サービスではないが startForeground() が必要...▼

続きを読む "VirtualDisplay for API 29" »

2020年12月20日

常に前面に表示するオーバーレイ

 スクリーンコードアナライザで解析中のマーカーやレーダーアニメーションを他のアプリの上に重ねて表示する基本実装。

続きを読む "常に前面に表示するオーバーレイ" »

2020年12月19日

サービスのライフサイクル

 スクリーンコードアナライザではバックグラウンドで画面上のQR・バーコードを解析する為「サービス」を利用。
 このサービスのライフサイクルを理解するための Android 8.0 (API レベル 26) とAndroid 9.0 (API レベル 28) に対応した基本実装サンプル。

続きを読む "サービスのライフサイクル" »

2020年12月18日

レーダーアニメーション

 スクリーンコードアナライザで使用しているレーダーアニメーションの実装例。

続きを読む "レーダーアニメーション" »

2020年12月17日

署名付きBundre/APK作成時のLintエラー

Android Stidio 4.2.2

 いよいよ公開しようと Build > "Generate Signed Bundre or APK" でビルドすると
Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
で失敗。対応方法は...▼

続きを読む "署名付きBundre/APK作成時のLintエラー" »

2020年12月16日

VirtualDisplay 実装例

VirtualDisplaycommit e87093e
VirtualDisplay の出力先を SurfaceView.getHolder().getSurface() として常に端末の画面で SurfaceView を更新するシンプルな例。

commit 2ba351b
次に VirtualDisplay 出力先を ImageReader.getSurface() として onClick で ImageView を更新する例。

 このままだと左に寄って機種によって例えば Galaxy S7 edge では画像のような現象が生じる。ImageReader.acquireLatestImage() で取得する Image.Plane の幅のピクセル数が
Image.getWidth() や DisplayMetrics.widthPixels の値より幅が広い。

commit 1b6140f
最終的にはImageReader.acquireLatestImage() で取得したサイズで ImageReader・VirtualDisplayを作り直すことで改善。

Github VirtualDisplaySample

続きを読む "VirtualDisplay 実装例" »

2020年12月15日

RequestMultiplePermissions()記述例

 こちら「deprecated 対応」の「ActivityResultContracts.RequestPermission()」の複数権限時の書き方。
...▼

続きを読む "RequestMultiplePermissions()記述例" »

2020年12月14日

deprecated対応

 権限チェックなどで使用する startActivityForResult(), onActivityResult(), requestPermissions(), onRequestPermissionsResult() が 非推奨(deprecated)ということで java でのアップデート記術例。
...▼

続きを読む "deprecated対応" »

2020年12月13日

FTPのみのレンタルサーバーをGitで更新したい

 ワードプレスで満足というかワードプレスでしかWEBコンテンツ作れない人が好んで選択する格安レンタルサーバ。 まもなく限界となりWEBアプリケーション構築となった時、ssh接続できない、Git管理できない。

 何百何千ものファイルをFTP管理しているつもりになって不要ファイルの肥溜めサーバーとなるのは火を見るより明らか・・・。 FTPでしかコンテンツを管理できないのを何とかできないか・・・ GitがFTPプロトコルをしゃべってくれれば良いものの今更FTPなのかクローンとフェッチのみ。

 調べてみると、git-サブコマンド(git-subcommand)を応用した "git-ftp" ツールが見つかります。さすが Git コマンドは奥が深い。
 前提 git-ftp version 1.6.0 早速 導入・・・▼

続きを読む "FTPのみのレンタルサーバーをGitで更新したい" »

2020年12月12日

おすすめ逆引き

Androidアプリ開発逆引きレシピ ISBN:9784798134512
第1章 ユーザーインタ ーフェース
第2章 コンポーネント
第3章 レイアウト
第4章 アプリ
第5章 画面操作
第6章 描画処理
第7章 マルチメディア処理
第8章 インターネット利用
第9章 SNSサービス
第10章 地図
第11章 デバイス
第12章 バックグラウンド動作
第13章 通知
第14章 連携処理
第15章 データ処理
第16章 データベース
第17章 公開
第18章 デバッグ
第19章 ライブラリの利用

続きを読む "おすすめ逆引き" »

2020年12月11日

CentOS-8.3.2011 64bit + ffmpeg 4.2.4

CentOS-8.3.2011 64bit に、ネット上の情報を元に ffmpeg をインストールしようとすると次のようなエラー。
conflicting requests
  - nothing provides libSDL2-2.0.so.0()(64bit) needed by ffmpeg-4.2.4-1.el8.x86_64
  - nothing provides libSDL2-2.0.so.0()(64bit) needed by libavdevice-4.2.4-1.el8.x86_64
 最終的なインストールの記録は...▼

続きを読む "CentOS-8.3.2011 64bit + ffmpeg 4.2.4" »

2020年12月10日

ラジコ仕様変更

 12月3日からエアーチェックサーバーラジコの録音をしなくなりました。
 NHK教育が離脱したくらいで ココ数年安定していたところ Adobe Flash の廃止に伴う 久しぶりの仕様変更。
 しばらく コマンドラインサウンドレコーダーでタイムフリーを録音して応急処置。
 ポッドキャストも直接ダウンロードしにくくなりつつあるこのご時世、一日も早くリアルタイムエアーチェックを復旧させたい。...▼

続きを読む "ラジコ仕様変更" »

2020年10月18日

文字解析情報を画像上に重ね合わせる

 ML(Machine Lerning) Kit のサンプルでは、静止画も含め リアルタイムで解析情報を画像上に重ね合わせる。映画やニュースで見かけるような。
 最小構成のデジタル数字認識サンプルに、ML Kit サンプルを参考に最小限の文字解析情報オーバーレイを実装する。
 変更点は こちら...▼

続きを読む "文字解析情報を画像上に重ね合わせる" »

2020年10月17日

Firebase を使用した MK(Machine Lerning) Kit サンプル

 Google Firebase のドキュメントからリンクされる公式リポジトリ quickstart-android
git clone git@github.com:firebase/quickstart-android.git
に含まれる MK Kit は、現時点でまともに動作しない。「ML Kit Vision Quickstart Sample App」と比較してソースも半分以上消えており 移行途中?・・・
 ネット上には Firebase を使用したMK Kit の断片的な利用情報が見つけられるので下記gitコマンドで
$ git -C ~/AndroidStudioProjects/github/quickstart-android log --diff-filter=D --summary
としてソース削除履歴を調べると

続きを読む "Firebase を使用した MK(Machine Lerning) Kit サンプル" »

2020年10月16日

Error: The apk for your currently selected variant is not signed.

 ML(Machine Lerning) Kit の学習のため 「ML Kit Vision Quickstart Sample App」をダウンロード、ビルド、実行。
$ git clone git@github.com:googlesamples/mlkit.git ~/AndroidStudioProjects/github/mlkit
Fri Oct 30 08:41:29 2020 -0700 時点のソース。
 このサンプルのプロジェクト(mlkit/android/vision-quickstart/)を Android Studio 4.0 で 「Open an existing Android Studio project」すると、gradle の同期に数分間(ADSL)。
 その後 build しようとすると 下記エラー(1)(2)。
Error: The apk for your currently selected variant (vision-quickstart-proguard.apk) is not signed. Please specify a signing configuration for this variant (proguard).
解決方法は...

続きを読む "Error: The apk for your currently selected variant is not signed." »

2020年10月15日

デジタル数字認識

 血圧測定できるスマートウォッチから、Bluetooth(ブルートゥース)で 計測値を取り込むのが王道?
 腕時計する習慣もなく、そもそも疑わしい測計値。せっかく家庭用の血圧計(omron HEM-737)があるので、この液晶表示をスキャンするだけなら便利かも。

 調べると Google Cloud Vision API、tess-twoライブラリ などが有名。現時点で Firebase の ML(Machine Learning) Kit が比較的 新しそう。クラウドに依存せず オフライン の スタンドアロン(オンデバイス/on-device) で動作することを確認済。
 公式のガイドが基本、前半の「画像内のテキストを認識する(Recognize Text in Images )」で留めるのがポイント。
https://firebase.google.com/docs/ml-kit/android/recognize-text
 ちなみに「ドキュメントの画像でテキストを認識する(Recognize text in images of documents)」を実装すると、実行時に停止し「Cloud Vision API」を有効にすることが促され、さらに Firebase 無料の spark から従量課金の Blaze プランへ誘導される。
 不完全な Kotolin 断片ソース か 切り分けしにくい大きなデモが多かったので、必要最小構成の実装例。
https://github.com/remixgrjp/OCR1
 Andorid Studio 4.0 の Basic Activity から、Firebase の設定を追加し オンデバイスで画像からテキストを認識する必要最小構成。

続きを読む "デジタル数字認識" »

2020年10月13日

DELL vostro 3491 の BIOS 1.11.0

 2020-09-24 に通知された DELL vostro 3491 の BIOS 1.11.0。
 前回は1度でアップデートされたが、今回インストール完了せず本日3度目。
 ファイルは
Inspiron_Vostro_5493_3491_1.11.0.exe
ということで、探すと
C:\ProgramData\SupportAssist\Client\Agent\Downloads\XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
にダウンロードされているので、管理者権限で手動実行。
再起動後BIOS画面でアップデートされ無事完了。

2020年10月11日

CentOS6 での Git2.*

 2017年ごろ CentOS6.9 サーバへインストールしたGit。
$ wget http://wing-repo.net/wing/6/EL6.wing.repo
$ sudo mv EL6.wing.repo /etc/yum.repos.d/.
$ sudo yum -y --enablerepo=wing install git
$ git --version
git version 2.3.7
 その後 2018年ごろから リポジトリー wing がなくなり ius に。
$ sudo yum install https://repo.ius.io/ius-release-el6.rpm
$ sudo yum install git2u
ところが、本日現在
https://repo.ius.io/6/i386/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
他のミラーを試します。
To address this issue please refer to the below knowledge base article

https://access.redhat.com/articles/1320623

If above article doesn't help to resolve this issue please open a ticket with Red Hat Support.

エラー: Cannot retrieve repository metadata (repomd.xml) for repository: ius. Please verify its path and try again
 もはや yum コマンドでインストールできない?
https://repo.ius.io/6/x86_64/repodata/repomd.xml
は、存在しているのだけど・・・。

続きを読む "CentOS6 での Git2.*" »

2020年10月03日

Pixel4 開発用 USB Type C Type B 変換ケーブル

Rampow USB Type C ケーブル【1m/黒/保証付き】急速充電 QuickCharge3.0対応 USB3.1 Gen1規格 Sony Xperia XZ/XZ2, Samsung S10, Asus Zenfone 2, Fujitsu Arrows, iQOS(アイコス)3, GoPro Hero 5/6 タイプc多機種対応 在宅勤務支援
 新しい開発用Android Pixel4 の USB は Type C。
 DELL vostro 3491 の USB はType A。
 変換ケーブルにはデータ通信NGなものもあるようで、今回調達したこのケーブルはOK。

2020年10月02日

あいうえお から かきくけこ へ

老活のすすめ はじめること 続けること 見直すこと
 330万部を超える国民的ベストセラー「女性の品格」の著者でもある昭和女子大学・理事長・総長の坂東眞理子 著
●あきらめる
●いじわる
●うちむき
●遠慮
●遅れた考え方
から
●感動する
●機嫌よく
●工夫する
●健康
●貢献する
ん~、あてはまる、あてはまる!

2020年10月01日

お気に入り Editor > Code Style > Java

Android Studio editconfig  巷に多いコードスタイルは 詰まっていて見にくいため、新環境などのマイグレーションお気に入り設定。
Android Studio 4.1
editorconfig.xml (InteliJ IDEA code style XML)
.editorconfig (EditConfig File)

2019年10月11日

10/11(金)AM4:51 にグーグルから届いたメール

[Action Required] Update your Android targetSdkVersion by November 1
 Hello Google Play Developer,

This is a reminder that starting November 1, 2019, updates to apps and games on Google Play will be required to target Android 9 (API level 28) or higher. After this date, the Play Console will prevent you from submitting new APKs with a targetSdkVersion less than 28.

Configuring your app to target a recent API level ensures that users benefit from significant security and performance improvements, while still allowing your app to run on older Android versions (down to the minSdkVersion).

Action required

Please ensure that your apps are configured to target at least Android 9 (API level 28) by November 1, 2019. For technical advice on how to change your app's target API level to meet these requirements, refer to the migration guide.

Affected apps

The apps included below have one or more APKs—in production or testing tracks—that aren't currently targeting API level 28 or higher. Apps are listed with the maximum version code and corresponding targetSdkVersion. If you have more than 20 apps that could be affected in your account, please check the Play Console for a full list.
asia.remix.clocksignal   4   24
asia.remix.clocksignals   3   24
asia.remix.clocktalk   4   26
asia.remix.clocktalkfree   7   26
asia.remix.daydreammovie   2   23
asia.remix.dictation   2   25
asia.remix.dictationfree   3   24
asia.remix.eiken2p   1   23
asia.remix.eiken3   1   23
asia.remix.eiken4   1   23
asia.remix.eiken5   1   23
asia.remix.koumon   1   23
asia.remix.learningcard   1   23
asia.remix.metronome   2   23
asia.remix.newsreaderfree   3   26
asia.remix.orgelfree   4   24
asia.remix.rokuseicm   1   24
asia.remix.sportswatchfree   3   24
asia.remix.wakeuponlan   1   23

The Google Play Team
和訳は
https://developers-jp.googleblog.com/2019/03/2019-api.html
放置すると、インストール時にデンジャラスなメッセージが表示される模様。

Android Studio 3.5.1 での対応手順・・・▼

続きを読む "10/11(金)AM4:51 にグーグルから届いたメール" »

2019年10月10日

Android Studio のWiFi接続

Android Studio 3.4.2 で 例えば
~/AppData/Local/Android/sdk/platform-tools/adb connect 192.168.0.3
としたときのWiFi接続エラー時のメッセージが以前と異なり
missing port in specification: tcp:192.168.0.3
のようになる。仕様が変わったのか?
~/AppData/Local/Android/sdk/platform-tools/adb connect 192.168.0.3:5555
ポートを明示することで無事接続。
 それでも WiFi接続できないときは...▼

続きを読む "Android Studio のWiFi接続" »

2019年10月09日

脆弱性診断ツール OWASP ZAP の必読書

Webセキュリティ担当者のための脆弱性診断スタートガイド 第2版 上野宣が教える新しい情報漏えいを防ぐ技術
 WEB最低限のセキュリティの基礎知識から診断ツールの活用方法など実践的です。

***