カテゴリーアーカイブ Android

村上 著者:村上

【Cordova】Android端末でアプリのパーミッションを確認するプラグイン「cordova-plugin-android-permissions」

昨日の記事で名前だけ紹介したプラグイン「cordova-plugin-android-permissions」についてご紹介します。
名前のとおり、Android 端末のパーミッションチェックしか行えませんが、使い方が分かりやすいのでこちらもおすすめです。

GitHub – NeoLSN/cordova-plugin-android-permissions: This plugin is designed for supporting Android new permissions checking mechanism.
https://github.com/NeoLSN/cordova-plugin-android-permissions

 

インストールのためのコマンドは下記のとおりです。

cordova plugin add cordova-plugin-android-permissions

使用例は下記のとおりです。

const permissions = cordova.plugins.permissions;
permissions.requestPermission(permissions.CAMERA, function(status) {
    if (status.hasPermission) {
        // 許可された
    } else {
        // 許可されなかった
    }
}, function(error) {
    // 許可されなかった
    console.log(error)
});

なお、上記ではカメラパーミッションをリクエストしています。
許可されていない場合は、パーミッションダイアログが表示されます。

単にパーミッションを確認するだけの場合は、下記を使用します。

permissions.checkPermission(permission, successCallback, errorCallback);

上記を実行した場合、指定したパーミッションが許可されていない時でもダイアログは表示されません。

カメラ以外のパーミッションを確認する場合は、下記の Manifest.permission を参考にしてください。

Manifest.permission|Android Developers
https://developer.android.com/reference/android/Manifest.permission.html?hl=zh-tw

 

以上、Android 端末でアプリのパーミッションを確認するためのプラグイン「cordova-plugin-android-permissions」のご紹介でした。
昨日紹介した「cordova-diagnostic-plugin」とは違い、第一引数を変更すれば同一の処理でパーミッションを確認できるのは良いですね。
個人的にはこういった書き方の方が好みです。
需要に合えば、是非ご活用ください。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】アプリのパーミッションを確認するプラグイン「cordova-diagnostic-plugin」

アプリのパーミッションを確認する必要があったため、プラグインをインストールしました。
Android なら、cordova-plugin-android-permissions というプラグインがあったのですが、名前のとおり、Android のみしか対応していなかったため、iOS でのチェックを行うためにこちらもインストールしました。
しかし、こちらは Android にも対応しているため、cordova-plugin-android-permissions の方をアンインストールして、これのみでチェックしようかと思っています。

GitHub のページはこちらから。

GitHub – dpa99c/cordova-diagnostic-plugin: Cordova/Phonegap plugin to manage device settings
https://github.com/dpa99c/cordova-diagnostic-plugin

 

使い方ですが、例えばカメラのパーミッションを確認する場合は下記のように記述します。

cordova.plugins.diagnostic.getCameraAuthorizationStatus(
    function(status) {
        // チェック成功
        if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラが使用が許可されている
            ......
        } else {
            // カメラが使用が許可されていない
            ......
        }
    }, function(error) {
        // チェック失敗
        console.error("The following error occurred: "+error);
    }, false
);

カメラの使用が許可されている場合は、上記のようにステータスで GRANTED の値が返却されます。
なので、返却値によって適宜処理を変更してください。

なお、上記のコードでは、パーミッションを確認するだけなので、もしなかった場合でも許可/拒否のダイアログの表示はしません。
パーミッションをリクエストしたい場合には、requestCameraAuthorization() を使用してください。
使用例は下記の通りです。

cordova.plugins.diagnostic.requestCameraAuthorization(
    function(status) {
        if (status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラ使用が許可された場合
            ......
        } else {
            // カメラ使用が許可された場合
            ......
        }
    }, function(error) {
        console.error("The following error occurred: "+error);
    }, false
);

使い方としてはこんな感じです。
他にも、位置情報や Bluetooth、プッシュ通知、マイクなど、色々チェックできます。

ただし、位置情報など一部のパーミッションによっては、戻り値のステータスの値が Android と iOS で違っていたりするので、そこだけはご注意ください。

 

以上、アプリのパーミッションをチェックするためのプラグイン「cordova-diagnostic-plugin」のご紹介でした。
戻り値に注意して、便利にお使いください。

  • この記事いいね! (0)
村上 著者:村上

【Android】「Android resource linking failed」エラーの対処法

今回は、Android Studio でアプリをビルド中に遭遇したエラーについて。
タイトルにも書きましたが、「Android resource linking failed」というエラーです。
直訳すると、Androidリソースのリンクに失敗しました とのことですが…つまりどういう意味?

 

ということで検索してみたところ、下記の記事がヒットしました。

[Android]「Android resource linking failed」というメッセージでビルドエラーになる場合の対処法 – みんなのプログラミング
https://minpro.net/android-resource-linking-failed

エラーの全文も載っていたので、私の環境で発生しているものと照らし合わせて確認しました。
どうやら同一のエラーのようです。

で、このエラーの対処法としては、アプリレベルの build.gradle ファイルの compileSdkVersionbuildToolsVersion と合わせればと良いとのこと。
私の環境では、buildToolsVersion は 28 だったので、build.gradle の compileSdkVersion も 28 に変更しました。

android {
    ...
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        ...
        targetSdkVersion 28
    }
}

なお、このとき一緒に targetSdkVersion も 28 に変更しましょう。

修正するのはこれだけです。
あとは、Sync Now を行ってから、通常通り、ビルド・実行を行ってください。
私の環境では、問題なく実行できました。

 

以上、Android Studio で「Android resource linking failed」エラーが発生した時の対処法でした。
分かりにくいエラーだったので最初は焦りましたが、参考になるサイトがヒットしたので良かったです。
参考になれば幸いです。

  • この記事いいね! (0)
村上 著者:村上

【Android】WebViewでURLで指定された画像が表示されないときの対処法

タイトル通り、Android の WebView にて、画像URLで指定された画像が表示できない時の対処法です。
私が普段使っている端末が Android 7.0 で、この環境では問題なかったのですが、Android 9.0 で発生しました。

で、Chrome のデバックモードで確認したところ、「Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED」というエラーが発生していました。
検索したところ、下記の記事がヒットしました。

Android – [Android] WebViewでサーバー上のhtmlを読み込めない|teratail
https://teratail.com/questions/94253

 

こちらによると、画像URLが https:// ではなく、セキュアではない http:// から読み込まれようとしているため、WebView がブロックしていることが原因のようです。
確認したところ、読み込もうとしている画像 URL は確かに URL は http:// ですね…。

で、対応策としては、AndroidManifest.xmlapplication タグに、下記を追加するとのこと。

<application ... android:usesCleartextTraffic="true">
    ...
</application>

上記の android:usesCleartextTraffic="true" を AndroidManifest.xml に設定することでも全ての通信に対して、暗号化されていない、HTTP 通信を許可することができます。
上記を追加して実行したところ、無事に画像が表示されました!

しかし、何故か PC にAndroid 端末を繋いで直接インストールする方法の時は画像が表示されるという謎な動きをしたので、DeployGate を挟んでインストールを行いました。
この現象については要注意ですね!

 

以上、Android の WebView で、画像URLで指定された画像が表示されない時の対処法でした。
…本当は、画像 URL もセキュアな通信で取得するようにするのが一番良いんですけどね…。
でも、すぐには難しいと思うので、この方法でしのぎましょう。

  • この記事いいね! (0)
asaba 著者:asaba

【android】Could not resolve all files for configuration ‘:app:debugCompileClasspath’の解消法

タイトルの通りですが、クラスパスがないのでビルドできません的なエラーです。原因は’com.android.tools.build:gradle:●.●.●’の

●●の部分がグレイドルのバージョンと合っていなかったりandroid support libraryをインストールしていなかったりと多岐に渡りますが、

自分の場合はただ一行追加するだけでおとなしくなってくれました。それがこちらです。

 

<pre>repositories {
    google()←これをjcenter()の上に追加するだけ
    jcenter()
}</pre>

 

build.gradleにあるallprojectsスコープとrepositoriesスコープ内にgoogle()を追加してください。

 

android support libraryを使っているならこれを必ず追加しろということだと思います。順番は先頭にしないと警告が出るので

とりあえず一番先頭においておけば間違いはないはず。

自分の場合はこちらで解決しましたが、中にはsdkmanagerのsdktoolをアンインストールして再度インストールしないと消えない

ケースもあったので(スタックオーバーフロー参照)これが参考になるか分からないですが

  • この記事いいね! (0)
村上 著者:村上

【Cordova】cordova-plugin-firebaseを導入した際にAndroid Studioでエラーが発生する

タイトル通り、Cordova アプリに cordova-plugin-firebase プラグインを導入した際、Android Studio でアプリをビルドしようとするとエラーが発生しました。
エラーログを確認したところ、どうやら Java ファイルでエラーが発生しているようでした。
GitHub の Issues でも同じエラーと思われる投稿がありました。

その投稿については下記からご確認できます。

New error on android build since 06-05-2019 · Issue #1057 · arnesson/cordova-plugin-firebase · GitHub
https://github.com/arnesson/cordova-plugin-firebase/issues/1057

 

で、寄せられた投稿を確認したところ、解決策らしきものを発見!
その方法は、build.gradle に記載されている、Firebase 関連の依存関係のバージョンを下記のとおりに下げるというものでした。

compile "com.google.firebase:firebase-core:16.0.8"
compile "com.google.firebase:firebase-messaging:17.5.0"
compile "com.google.firebase:firebase-config:16.4.1"
compile "com.google.firebase:firebase-perf:16.2.4"

恐らく、プラグインをインストールしただけですと、バージョンが + という表記になっているかと思います。
それらを上記のバージョンに変更します。
変更後は、Sync Now を実行します。
私の環境では、こちらの方法でエラーが解消できました!
その後、通常通りにビルド・実行も行いましたが、何かエラーが発生したり、アプリが途中でクラッシュしたりすることもなく、問題なく実行できました。

最初エラーに遭遇した際、エラーログに表示されているエラー箇所そのものをデバッグしようとしましたが、どうしても修正方法が調べられない箇所があったので、プラグイン導入自体を諦めなければならないのかと危惧しましたが、無事実装できてよかったです。

 

以上、cordova-plugin-firebase 導入時に、Android Studio でエラーが発生する時の対処法でした。
誰かの参考になれば幸いです。

  • この記事いいね! (0)
asaba 著者:asaba

【androidstudio】遅くなったandroid studioの速度を改善する方法

タイトルの通りです。先週まで普通に開発に使っていたandroid studioが突然重くなりました。というかビルドの終わる時間が遅く

なりました。困った時のとりあえずクリーンビルドをしてみても変わらず。開いていた重そうなファイルを全部閉じて再起動しても

のろのろビルドのまま・・・。グレイドルのアップデートに必要なパッケージをたくさんインストールしたからでしょうか。

いずれにしろこのままでは気分が悪いので公式をのぞいたら答えが見つかりました。

どうやらdexというツールを使って変更したソースや再コンパイルの必要があるソースだけを再コンパイルすることで開発中のコンパイル

時間を短縮できるみたいです。といっても難しい処理は必要なくgradle.propertiesファイル内に以下のコードを記述するだけで改善できる

みたいです。

</pre>
<pre class=""><span class="pln">org</span><span class="pun">.</span><span class="pln">gradle</span><span class="pun">.</span><span class="pln">jvmargs </span><span class="pun">=</span> <span class="pun">-</span><span class="typ">Xmx2048m</span></pre>
<pre>

 

自分も試しに入れてみたところ期待した通り、一分くらいかかっていたビルドがいらいらを感じない程度には早くなりました。

(推定半分くらいかな?)早くなったのはいいけど偶にビルドできないのはなんででしょう。んー、これ解決と言えるか微妙なところですね・・・。

使っていて気分が悪いままだったら別の解決法を考えます。

  • この記事いいね! (0)
村上 著者:村上

【AndroidStudio】「Gradle DSL method not found: ‘implementation()’」エラーの対処法

今回は、Android Studio で発生したエラーについて。
以前開発していたアプリを開いたところ、「ERROR: Gradle DSL method not found: ‘implementation()’」というエラーに遭遇しました。
Android Studio のバージョンを上げたような気もするし…それが原因かな。

で、エラーを検索したところ、下記の投稿がヒットしました。

android – Gradle DSL method not found: ‘implementation()’ – Stack Overflow
https://stackoverflow.com/questions/45838173/gradle-dsl-method-not-found-implementation

 

投稿によると、implementation() を利用するには、

  1. gradle plugin を Android 3.0.0 以上に更新
  2. gradle のバージョンを 3.4 以降に

上記が必要とのことでした。

そのため、まず build.gradle を下記の記述のように変更します。

buildscript {
    repositories {
        ...
        // 下記を追加
        google()
    }

    dependencies {
        // ここのバージョンを 3.0.0-beta1 に変更
        classpath 'com.android.tools.build:gradle:3.0.0-beta1'
    }
}

次に、gradle-wrapper.properties を開き、下記を追加します。

distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip

もし既に違うバージョンのファイルが指定されている場合は、コメントアウトなどをしてください。
消しても問題ないとは思いますがが、私は念のためコメントアウトで対応しました。

あとは、Sync now をクリックして実行すればOKです。
なお、私の環境では、この後さらにバージョンアップを促されたので、それも実行しました。
作業は以上です。
他のエラーが発生していなければ、問題なくビルドが実行できると思います。

 

以上、「ERROR: Gradle DSL method not found: ‘implementation()’」エラーの対処法でした。
Stack Overflow には大分お世話になっていますので、今後も困ったらこちらをのぞいてみたいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

実は日本発!!モバイル緊急速報の仕組み”ETWS”、実はAndroid8.1.0でこっそり標準対応されていた…!

今では皆さんが普段利用しているほとんどのキャリア製端末で緊急速報が受け取れるようになりましたが、実はこの緊急速報の仕組みが国際規格になっているのをご存知でしたか?

Softbank版”緊急速報メール”アプリのアイコン

この仕組みはETWS(Earthquake and Tsunami Warning System)と呼ばれ、実はモバイル通信規格である”LTE”の標準仕様として策定されています。

このETWS、実はLTE策定時にはもともと組み込まれる予定ではなかったようなのですが、策定に参加していた日本のNTTドコモが提案した”エリアメール”の仕様が取り込まれた結果となっています。

緊急地震速報を支える「ETWS」とは何か – 日経XTECH

ETWSが国際的に一般的な機能となっているかといわれるとまだ微妙ですが、標準仕様なので海外企業が作ったグローバルモデルの端末であっても、この仕様を取り込んでいれば日本の緊急速報を受信できますし、逆に海外であっても、ETWSで配信している国であれば緊急速報を受け取ることができます。すごいですね。

そんなETWSですが、実はAndroid 8.1からOSレベルで正式に対応していることをご存知でしょうか。

Android 8.1で地震・津波以外の緊急速報(ETWS)が受信可能に? – てくろぐ

Androidはオープンソースなので元のコードは誰でも読むことができるのですが、上記の記事によるとこのソースコードの時点で、ETWSの受信に関するソースが追加されているようです。

さらに、実端末(Nexus 5X)での実験でも、実際にETWSを受信している様子を上記の記事内の動画で見ることができます。

OS側で標準で対応しているということは、各メーカーが意図的に無効化しない限りETWSは受信できるということになるので、今後SIMフリーのAndroid端末であってもETWSが受信できる端末がどんどん多くなってきそうです。

SIMフリースマートフォンをメインで利用するユーザーにとっては嬉しい話ですね。

 

 

  • この記事いいね! (0)
村上 著者:村上

【GooglePlay】アプリ却下の異議申し立てを送付した時に遭遇したエラーについて

先日、GooglePlay に公開していたアプリがストアから削除され、その対応としての異議申し立ての方法についてご紹介しましたが、若干進展したのでご紹介。
どうやらうまく申請が送れていなかったようで、再度送ってみたところ…Google からエラーが返ってきました。

それがこちら。

Google Play Protect Appeals

Hi

You recently submitted an appeal for an app with Google Play Protect.

We were unable to download the APK file from the link you provided. Please submit a new appeal and make sure that the link is publicly browsable.

Thank You,
Google Play Protect Team

なんでも、送付したAPKのダウンロードリンクからアプリをインストールできないとのことでした。
私はリンク先からインストールできたのになぜ!

ということで調べてみたところ、同じような現象に悩まされている方を発見。
それがこちらの記事です。

The story of my app getting blocked by google play protect
https://medium.com/@ali.gh2236/the-story-of-my-app-getting-blocked-by-google-play-protect-4784c83481be

英語の記事なので、頑張って読んでください。
で、こちらの記事によると、DropBox で APK をインストールするリンクを作成すると良いとのことでした。

 

手順としては、まず、DropBox でアカウントを作成し、そこに APK ファイルをアップロードします。
で、ファイル共有のためのリンクを作成します。

若干の差はあるかもしれませんが、だいたいこんな画面が表示されると思いますので、ダイアログの下の方から共有用のリンクを作成し、コピーします。
が、このままでは問題があるようで、リンク最後の 「?dl=0」の数字を 0 から 1 に変更します。
こうすると、リンクにアクセスした時に自動で APK ファイルがダウンロードされるようになります。

作業は以上で完了です。
あとは、この URL と一緒にアプリのパッケージ名や申請内容などの必要事項を入力して、再度申請しましょう。
そうすれば、問題なく受け取れましたという内容のメールが Google から送られてきました。
あとは、審査が終わるのを待つだけです。

 

以上、アプリの異議申し立ての時に発生した、APK がインストールできないという現象への対処法でした。
なお、短縮 URL に変換する処理は行わなくても大丈夫のようです。
ご参考になれば幸いです。

  • この記事いいね! (0)