我具有使用自签名证书的SSL REST服务。我可以通过TRESTClient从常规delphi应用程序中调用它。但是,当我在Android应用程序中使用它时,它将在调用过程中引发以下异常。
带有消息的异常类EJNIException 'java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:的信任锚 找不到认证路径。
我发现,必须通过将android:networkSecurityConfig="@xml/network_security_config"
添加到 AndroidManifest.template.xml 文件的application
部分中来配置网络安全。
<application android:networkSecurityConfig="@xml/network_security_config"
android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"
android:resizeableActivity="false">
然后,我必须创建具有相似内容的 res \ xml \ network_security_config.xml 文件:
<?xml version="1.0" encoding="utf-8"?> <network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<trust-anchors>
<certificates src="@raw/my_ca"/>
</trust-anchors>
</domain-config> </network-security-config>
但是要放置 network_security_config.xml 文件的位置。当我将其放置在 Debug 的 res 文件夹中时,它在构建过程中被删除。因此无法找到它,并且应用程序在打包阶段会引发异常。
错误:E2312 C:\ Users \ User \ Documents \ Embarcadero \ Studio \ Projects \ Andr \ Android \ Debug \ TabbedApplication \ AndroidManifest.xml:19: 错误:错误:找不到与给定名称匹配的资源(位于 值“ @ xml / network_security_config”的“ networkSecurityConfig”。
我不知道在哪里放置它并让RAD Studio知道它必须在编译时抓取此文件。
答案 0 :(得分:0)
您不能直接使用“调试”和“发布”文件夹来指定需要与应用程序一起部署的文件,因为它们是每次重建时清除的临时文件夹。
要进行部署,您应该使用Project -> Deployment
对话框。
您可以在其中指定要部署的本地文件(放置在构建文件夹外部),配置(调试,发行版或两者)及其目标路径。