Android 9向けにCordovaで開発しているときに、HTTPリクエストを投げた時に以下のERR_CLEARTEXT_NOT_PERMITTED
エラーが発生してうまくいかない場合があります。
その対応方法についてです。
素のAndroidアプリを開発している場合は以下の記事が参考になると思います。
対策
config.xmlに追記
以下の内容をconfig.xml
に追加してあげます。これにより素のAndroidの開発をしているときにAndroidManifest.xml
に追記するのと同じような感じになります。
<platform name="android"></platform> <allow-intent href="market:*" /> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application"> <application android:usesCleartextTraffic="true" /> </edit-config> </platform>
<allow-intent />
の部分はプラットフォームを追加した時からあると思いますので、その下に<edit-config ...
を追加します。usesCleartextTraffic
の設定値を真にすることでHTTP通信を許可するようにします。
以上を追加しただけでは以下のunbound prefix
エラーが発生する場合があります。
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:mergeDebugResources'. > java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed C:\...\config.xml:25: error: unbound prefix.
その場合は同じくconfig.xml
を少し編集します。多分xmlns:android
の属性と値がないはずですので追加します。
<widget id="アプリのID" version="アプリのバージョン" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
これでビルドすると先ほどのunbound prefix
が解消し、HTTPでリクエストを投げてもエラーとならずに成功します!
なぜ発生する?
Android 9(Pie)よりHTTPS通信がデフォルトとなりましたのでHTTP通信(http://...
)を行うことができなくなりました。これによりhttp://...
でリクエストを投げた時にエラーが発生します。それをコンフィグから許可するようにしています。
個人開発や小規模の開発だとHTTPS化の敷居がちょっと高いのでちょっと手間になりましたね🤔
参考
以下のサイトを参考にしました。