【问题标题】:Android signed APK can not make API callsAndroid 签名的 APK 无法进行 API 调用
【发布时间】:2022-08-02 21:30:44
【问题描述】:

尽管几个月没有在生产环境中更新,但我们的应用程序在进行 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
  • 它与签名无关 - 调试版本也已签名。它们使用您安装 Android Studio 时生成的密钥进行签名。最有可能的是,您为发布和调试构建访问了不同的 URL,以访问暂存环境,并且发布设置有问题。但是您需要使用调试器并找出在较低级别上实际发生的情况,特别是您的网络调用正在执行和返回的内容。
  • 我们访问的是同一个 URL。我运行ionic cordova build android --release 来制作APK 文件,然后对apk 文件进行签名。签署应用程序是我所知道的唯一区别。如果签署应用程序使应用程序不可调试,我们如何使用调试器?
  • 签署应用程序不是您的问题。所有 APK 均已签名。甚至调试。 Android 将拒绝运行未签名的 APK。你的问题在别处。
  • 抱歉,如果我在这里遗漏了一些东西,但应用程序确实运行并且它正常工作,直到我使用上面的 jarsigner 命令对其进行签名。当我签署它时,我遇到了我们在生产中遇到的同样问题。令人困惑的部分是生产应用程序已经运行了几个月并且没有任何更新。
  • 产品版本中还有其他差异。正如回答者已经建议的那样,proguard 是一个可能的嫌疑人。

标签: android cordova ionic-framework ionic-cordova


【解决方案1】:

您是否已将 proguard shrinkResourcesmodifiable 启用到 gradle 中? 如果是,那么您必须为模型类添加 proguard 规则

【讨论】:

    【解决方案2】:

    我在这个问题中发布的问题与我在here 发布的问题相同。这个问题只是根据应用程序的构建方式以不同的方式呈现。为清楚起见,我从下面的另一个问题中复制了解决方案:

    我们找到了解决方案。从不同的源服务器颁发证书就可以了。据我所知,证书、根证书和中间证书都是有效的。无论出于何种原因,Android 应用程序都不接受证书有效。据我所知,这可能是由于中间证书过期或 Cordova 使用旧版本的 BoringSSL 造成的。

    如果有人在生产/发布版本中遇到此问题,请进入 Android Manifest 文件并将 Debuggable 设置为 true。这个问题应该消失。然后,使用 debuggable false 重新运行生产/发布版本,问题应该会再次出现。将生产/发布版本保持在可调试的 false 上,并将 android:usesCleartextTraffic 设置为 true。这个问题应该会再次消失。如果您有相同的结果,您可能会遇到类似的问题,即应用程序不接受证书(或者您使用的是 HTTP 而不是 HTTPS),而新证书可能会解决问题。

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

    【讨论】:

      【解决方案3】:

      检查清单中的 Internet 权限

      例子:

      <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"
              >
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        相关资源
        最近更新 更多