cordova 如果可调试为假,Android APK将拒绝进行API调用

mdfafbf1  于 2022-11-15  发布在  Android
关注(0)|答案(2)|浏览(165)

我们的应用在进行API调用时已经开始挂起,尽管在生产中几个月没有更新。我们可以使用应用的Play Store版本或通过在AndroidManfiest.xml中设置android:debuggable="false"来复制该问题。但是,如果我们随后设置android:usesCleartextTraffic="true",该问题就会消失。如果我们执行一个进行API调用的操作,然后让应用离开几分钟,我们会看到“应用程序没有响应”消息。
我们最近还更新了API调用将到达的服务器的证书。
有没有办法解决这个问题或者看看是什么原因导致应用程序没有响应?我试着查看网络/调试选项卡,但是如果debuggable为false,这似乎是不可能的。
AndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="12345" android:versionName="3.32" package="foo.bar.foo.com.bar.preview" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.plugin.notification.util.AssetProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/localnotification_provider_paths" />
        </provider>
        <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.TriggerReceiver" />
        <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.ClearReceiver" />
        <activity android:exported="false" android:launchMode="singleInstance" android:name="de.appplant.cordova.plugin.localnotification.ClickReceiver" android:theme="@android:style/Theme.Translucent" />
    </application>
    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

</manifest>
n8ghc7c1

n8ghc7c11#

在app/src/main/res/xml/中创建一个xml文件
network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
 <base-config cleartextTrafficPermitted="true" />
</network-security-config>

并将其添加到AndroidManifest.xml

<application
     ....
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config"
   >
kb5ga3dv

kb5ga3dv2#

我们找到了一个解决方案。从不同的源服务器颁发证书成功了。从我的Angular 来看,证书、根证书和中间证书都是有效的。Android应用程序不接受这些证书,原因是什么。从我的Angular 来看,这可能是由于中间证书过期或Cordova使用了旧版本的BoringSSL。
如果有人在生产/发布版本中遇到此问题,请进入Android Manifest文件并将Debuggable设置为true。问题应该会消失。然后,使用Debuggable false重新运行生产/发布版本,问题应该会再次出现。将生产/发布版本的Debuggable设置为false,并将android:usesCleartextTraffic设置为true。问题应该会再次消失。如果您得到相同的结果,则您可能遇到了类似的问题,即应用程序不接受证书(或者您使用HTTP而不是HTTPS),新证书可能会解决此问题。

<application android:debuggable="true"android:usesCleartextTraffic="true">

相关问题