我们的应用程序在进行 API 调用时开始挂起,尽管几个月没有在生产环境中进行更新。我们可以使用应用程序的 Play 商店版本或通过创建本地构建的 APK 文件并对其进行签名来复制该问题。但是,我们无法在浏览器或本地构建的未签名 APK 文件上复制该问题。如果我们执行一个进行 API 调用的操作,然后离开应用程序几分钟,我们会看到一条“应用程序没有响应”消息,即使您仍然可以在应用程序中导航。
有什么方法可以解决此问题或查看导致应用程序无响应的原因吗?我尝试查看网络/调试选项卡,但这在签名设备上似乎不可能。
# Generate Key
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
# Sign the APK
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
我在这个问题中发布的问题与我在here发布的问题/解决方案相同。这个问题只是以不同的方式呈现,具体取决于应用程序的构建方式。为了清楚起见,我复制了下面其他问题的解决方案:
我们找到了解决方案。从不同的源服务器颁发证书就可以了。据我所知,证书、根证书和中间证书都是有效的。无论出于何种原因,Android 应用程序都不接受有效的证书。据我所知,这可能是由于中间证书过期或 Cordova 使用旧版本的 BoringSSL 导致的。
如果有人在生产/发布版本中遇到此问题,请进入 Android Manifest 文件并将 Debuggable 设置为 true。这个问题应该消失。然后,使用 debuggable false 重新运行生产/发布版本,问题应该会再次出现。将生产/发布版本保持为可调试 false 并将 android:usesCleartextTraffic 设置为 true。这个问题应该会再次消失。如果您得到相同的结果,则可能会遇到类似的问题,即应用程序不接受证书(或者您使用的是 HTTP 而不是 HTTPS),而新证书可能会解决该问题。
<application android:debuggable="true"android:usesCleartextTraffic="true">
您是否在 gradle 中启用了 proguard
shrinkResources
和 modifiable
?
如果是,那么你必须为你的模型类添加混淆规则
检查清单中的互联网权限
示例:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dc.filetracker">
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="File Tracker" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true"
>
In Ionic new version you need to go to manifest.xml under android and simply add android:usesCleartextTraffic="true" like this.
Also, if you are working in test mode and using http or https for API call you need to define the same in capacitor.config.ts file . Where you need to add http or https for androidScheme property.
webDir: 'www',
server: {
androidScheme: 'http',
}
<application android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:usesCleartextTraffic="true">
</application>