로 업그레이드 한 후 코르도바 안드로이드 8.0 , 내가보고하고 net::ERR_CLEARTEXT_NOT_PERMITTED
연결을 시도 할 때 오류를 http://
목표로하고있다.
그 이유는 무엇이며 어떻게 해결할 수 있습니까?
로 업그레이드 한 후 코르도바 안드로이드 8.0 , 내가보고하고 net::ERR_CLEARTEXT_NOT_PERMITTED
연결을 시도 할 때 오류를 http://
목표로하고있다.
그 이유는 무엇이며 어떻게 해결할 수 있습니까?
답변:
Cordova Android 플랫폼의 기본 API 레벨이 업그레이드되었습니다. Android 9 장치에서 이제 일반 텍스트 통신이 기본적으로 비활성화됩니다. .
일반 텍스트 통신을 다시 허용하려면 태그의을 다음 android:usesCleartextTraffic
으로 설정하십시오 .application
true
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
주석에서 언급했듯이 android
이전에 XML 네임 스페이스를 정의하지 않은 경우 error: unbound prefix
빌드 중에이 표시됩니다. 이는 widget
다음과 config.xml
같이 동일한에서 태그에 추가해야 함을 나타냅니다 .
<widget id="you-app-id" version="1.2.3"
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">
AndroidManifest.xml
Android 프로젝트에서 변경 사항이 적용되었는지 확인 했습니까 ?
config.xml에서 수정해야 할 두 가지 사항이 있으므로 정답은 xml을 추가하는 것입니다.
<widget id="com.my.awesomeapp" version="1.0.0"
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">
추가로 다음을 허용하도록 구성 편집 :
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
1 단계를 피하는 경우 오류 : 언 바운드 접두사. 나타날거야
여기서 일반 텍스트는 암호화되지 않은 정보를 나타냅니다. Android 9 이후로 앱이 HTTPS API를 호출하여 이브 드롭이 없는지 확인하는 것이 좋습니다.
그러나 여전히 HTTP API를 호출해야하는 경우 다음을 수행 할 수 있습니다.
플랫폼 : Ionic 4
project-root / resources / android / xml 아래에 network_security_config.xml 이라는 파일을 만듭니다.
다음 줄을 추가하십시오.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>ip-or-domain-name</domain>
</domain-config>
</network-security-config>
이제 project-root / config.xml 에서 다음 줄을 업데이트합니다.
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
... other statements...
이제 작동합니다.
config.xml
전과 edit-config
태그 : <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
. 감사!
문제를 해결하기 위해 다른 옵션이 있습니다. resources / android / xml / network_security_config.xml 파일에 있습니다. 끼워 넣다:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
<domain includeSubdomains="true">192.168.7.213:8733</domain>
</domain-config>
</network-security-config>
제 경우에는 IP 주소를 사용하고 있는데 base-config가 필요하지만 도메인이있는 경우입니다. 도메인을 추가하기 만하면됩니다.
오늘 직접이 문제에 직면했고 Apache Cordova 애플리케이션에 대해 Android 9 이상에서 일반 텍스트 트래픽을 수동으로 허용하려는 번거 로움을 덜어 줄 정말 멋진 플러그인을 발견했습니다. cordova-plugin-cleartext를 설치하기 만하면 플러그인이 Android의 모든 비하인드 스토리를 처리합니다.
$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android
며칠간의 투쟁 끝에 이것은 저에게 효과적이며 이것이 당신에게도 효과가 있기를 바랍니다.
이것을 코드 상단의 CONFIG.XML에 추가 하십시오.
<access origin="*" />
<allow-navigation href="*" />
그리고 이것은 플랫폼 안드로이드에서.
<edit-config file="app/src/main/AndroidManifest.xml"
mode="merge" target="/manifest/application"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml"
target="app/src/main/res/xml/network_security_config.xml" />
이 파일 "resources / android / xml / network_security_config.xml"에 다음 코드를 추가하십시오 .
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">YOUR DOMAIN HERE/IP</domain>
</domain-config>
</network-security-config>
trust-anchors
태그는 다른 모든 작업을 수행하는 최종 구성 요소 인 것처럼 보였습니다 .
여는 <widget> 태그 내에 다음 속성을 추가하면 저에게 효과적이었습니다. Android 9 에뮬레이터에서 간단하고 실시간으로 올바르게 다시로드됩니다. xmlns : android = "http://schemas.android.com/apk/res/android"
<widget id="com.my.awesomeapp" version="1.0.0"
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">
edit-config
( unbound prefix
오류 수정 )
당신은 추가해야
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
에
resources / android / xml / network_security_config.xml
이렇게
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>
다음은 나를 위해 일한 솔루션입니다. 내가 업데이트 한 파일은 다음과 같습니다.
해당 파일의 변경 사항은 다음과 같습니다.
1. config.xml
config.xml 파일의 <application android:usesCleartextTraffic="true" />
태그 내에 <edit-config>
태그를 추가 했습니다.
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:usesCleartextTraffic="true" />
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
...
<platform name="android">
2. network_security_config.xml
이 파일에서는 프로젝트 요구 사항에 따라 <domain>
태그 내에 2 개의 태그 <domain-config>
, 기본 도메인 및 하위 도메인을 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">mywebsite.in</domain>
<domain includeSubdomains="true">api.mywebsite.in</domain>
</domain-config>
</network-security-config>
도움을 주신 @Ashutosh에게 감사드립니다.
도움이 되었기를 바랍니다.
IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1)을 사용하는 Im
정보를 반복 할 수 있지만 플러그인을 추가 한 후 문제가 나타나기 시작했습니다 (아직 확실하지 않음). 위의 모든 조합을 시도했지만 아무것도 작동하지 않았습니다. 다음을 추가 한 후에 만 작동하기 시작했습니다.
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
프로젝트의 파일
resources / android / xml / network_security_config.xml
내 network_security_config.xml 파일은 이제 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.1.25.10</domain>
</domain-config>
</network-security-config>
모두에게 감사합니다.
이전 ionic cli (4.2)가 제 경우에 문제를 일으켰습니다. 5로 업데이트하여 문제를 해결했습니다.
cordova-custom-config
플러그인을 사용하여 Android 구성을 관리하고 있습니다. 이 경우 해결 방법은 다음을 새로 추가하는 custom-preference
것입니다 config.xml
.
<platform name="android">
<preference name="orientation" value="portrait" />
<!-- ... other settings ... -->
<!-- Allow http connections (by default Android only allows https) -->
<!-- See: /programming/54752716/ -->
<custom-preference
name="android-manifest/application/@android:usesCleartextTraffic"
value="true" />
</platform>
개발 빌드에만이 작업을 수행하는 방법을 아는 사람이 있습니까? 릴리스 빌드가이 설정을 벗어나면 기쁩니다.false
.
(iOS 구성 제안 buildType="debug"
을 보았지만 이것이 Android 구성에 적용되는지 확실하지 않습니다.)
@Der Hochstapler 솔루션에 감사드립니다.
그러나 IONIC 4 에서는 프로젝트 config.xml의 일부 사용자 정의 나를 위해 작동합니다.
위젯 태그에 줄 추가
<widget id="com.my.awesomeapp" version="1.0.0"
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">
그 후, Android 용 플랫폼 태그에서 아래의 일부 줄을 사용자 정의하고 networkSecurityConfig 및 리소스 파일 태그 뒤에 usesCleartextTraffic = true를
추가 하십시오.
<platform name="android">
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:usesCleartextTraffic="true" />
</edit-config>
</platform>
NPM 및 Cordova 명령에 문제가있는 레거시 Cordova 프레임 워크가있는 경우. 아래 옵션을 제안합니다.
android / res / xml / network_security_config.xml 파일 생성-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml-
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
다음 솔루션이 나를 위해 일했습니다.
이동 resources/android/xml/network_security_config.xml
변경-
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
error: unbound prefix.
Cordova 애플리케이션을 빌드하려고 할 때 오류 ( ) 가 발생했습니다 . 이 솔루션 내에서 추가되었다config.xml
내 루트에 파일<widget>
요소 속성xmlns:android="http://schemas.android.com/apk/res/android