处理密钥库文件?

sim*_*imo 1 android visual-studio-app-center

至于 react native android 应用程序,在 Visual Studio 签名文档中,它说如果我的密钥库不在我的存储库中,那么我需要上传我的密钥库文件contractor-release-key.keystore并在应用程序中心设置凭据,这就是我所做的,但是,在构建中,我收到此错误:

jarsigner: Certificate chain not found for: ***.  *** must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain
Run Code Online (Sandbox Code Playgroud)

另外,在 build.gradle 中,如果我设置:

releaseSigningConfig {
            storeFile rootProject.file("app/contractor-release-key.keystore")
            storePassword System.getenv("APPCENTER_KEYSTORE_PASSWORD")
            keyAlias System.getenv("APPCENTER_KEY_ALIAS")
            keyPassword System.getenv("APPCENTER_KEY_PASSWORD")
        }
Run Code Online (Sandbox Code Playgroud)

我得到错误:

Execution failed for task ':app:validateSigningRelease'.
> Keystore file '/Users/vsts/agent/2.153.2/work/1/s/android/app/contractor-release-key.keystore' not found for signing config 'releaseSigningConfig'.
Run Code Online (Sandbox Code Playgroud)

任何的想法?

编辑

当我将所有签名添加到 build.gradle 并将密钥库文件包含到存储库中时,但出现此错误:

Execution failed for task ':app:processReleaseManifest'.
> Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:9:5-54:19 to override.
Run Code Online (Sandbox Code Playgroud)

Ahm*_*ish 5

要解决问题:

  1. 您需要删除或注释掉您内部的任何发布或调试配置,android/app/build.gradle因为我们会让 AppCenter 在仪表板中弄清楚。
  2. 转到 AppCenter 仪表板并将您的密钥库凭据添加到 AppCenter,并确保您也上传了密钥库文件。
  3. 将您在内部所做的更改提交android/app/build.gradle到您的存储库。
  4. 在 App Center 分支内再次运行构建。

这应该可以解决您的问题。

如果您想知道我们为什么要这样做。这是因为 AppCenter 旨在为您处理整个签名过程步骤,因此您无需自己在存储库内部android/app/build.gradle或存储库中的任何其他位置向存储库添加任何 gradle 配置。在存储库之外进行环境配置的全部目的是因为这是一个很好的安全实践。我知道 AppCenter 的文档并没有说明这一点。

希望这能解决您的问题。