Android - 华为设备上 android.security.IKeystoreService.del 报 NullPointerException。

4
当我们将应用上传到Google Play商店时,谷歌的预发布报告显示该应用程序崩溃并出现空指针异常。该问题仅涉及华为设备中的KeyStore实现。
堆栈跟踪:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'int android.security.IKeystoreService.del(java.lang.String, int)' on a null object reference
       at android.security.KeyStore.delete(KeyStore.java:186)
       at android.security.Credentials.deletePrivateKeyTypeForAlias(Credentials.java:292)
       at android.security.Credentials.deleteAllTypesForAlias(Credentials.java:251)
       at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:464)
       at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:699)
       at com.example.utility.crypto.KeyStoreHelper.createKeys(Unknown Source)
       at com.example.utility.crypto.KeyStoreHelper.createKeys(Unknown Source)
       at com.example.activities.register.SplashActivity$1.run(Unknown Source)
       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:776)  

我正在使用谷歌的Tink库来实现Keystore。该库与错误无关。即使没有该库,错误仍会发生。
下面是代码:
@Throws(Exception::class)
private fun getOrGenerateNewKeysetHandle(): KeysetHandle {
    return AndroidKeysetManager.Builder()
        .withSharedPref(this, "KEYSET", "PREF")
        .withKeyTemplate(AeadKeyTemplates.AES256_GCM)
        .withMasterKeyUri(REIWA_MASTER_KEY_URI)
        .build()
        .keysetHandle
}

我认为这与设备的密钥库实现有关。 任何帮助将不胜感激。

似乎是库的问题或者我不知道的什么原因 :-) | 看起来 IKeystoreService 是空的。 - exploitr
@Toaster 不,这与库无关。没有库仍然会出现错误。 - Rajesh Jadav
需要添加一些代码片段,其中调用 IKeystoreService.del 或类似的库调用,以帮助回答者。 - exploitr
我们无法确定问题所在。请将使用utility.crypto.KeyStoreHelper.createKeys调用的代码放置在相应位置。 - Javasamurai
你找到答案了吗,@Rajesh? - rustyMagnet
没有,@rustyMagnet,我还没有找到任何解决方案。 - Rajesh Jadav
1个回答

0

使用AndroidKeysetManager.doNotUseKeystore()禁用密钥库集成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接