将 proguard 与 Hyperledger Iroha 一起使用时,我的应用程序崩溃了

Posted

技术标签:

【中文标题】将 proguard 与 Hyperledger Iroha 一起使用时,我的应用程序崩溃了【英文标题】:My app crashes when using proguard with Hyperledger Iroha 【发布时间】:2020-01-23 08:27:57 【问题描述】:

当我尝试在我的 build.gradle 文件中使用以下代码执行 minify enabled true 时,应用程序崩溃了:

代码

buildTypes 
    release 
        debuggable false
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    
    debug
        debuggable true
        minifyEnabled true
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    

当我这样做时:minifyEnabled true 在构建发布 apk:app-release.apk 后,应用程序崩溃了。 当我这样做时:minifyEnabled false 构建发布 apk 后:app-release.apk,构建没问题。

enter image description here

【问题讨论】:

【参考方案1】:

如参考资源所示,minifyEnabled 将删除未使用的代码。在您的情况下,可能存在与 JNI 一起使用的方法,否则编译器不知道它已被使用。再次根据 ref,您可以指定要阻止检查内置 minify 的文件(与 proguard 相同)。 The answer is here

【讨论】:

【参考方案2】:

如错误消息中所示,类加载器无法找到类 org.apache.xerces.datatype.DatatypeFactoryImpl

Proguard 正在更改类名以阻止这种情况发生,您可以添加

-keep class org.apache.** *; 

在您的 progurad-rules.pro 文件中

【讨论】:

添加这个后你得到的是同样的错误还是不同的错误?【参考方案3】:

将此添加到proguard

-keep public class jp.co.soramitsu.iroha.android.** 
      public protected *;
      public private *;

【讨论】:

现在我通过添加这个 -keep class org.** *; 到 proguard-rules.pro 文件

以上是关于将 proguard 与 Hyperledger Iroha 一起使用时,我的应用程序崩溃了的主要内容,如果未能解决你的问题,请参考以下文章

将系统属性与 proguard 配置文件一起传递给 gradle proguardFile 属性

使用 EnumTypeAdapter 时,将 proguard 与 GSON 和 RoboGuice 一起使用会失败

Hyperledger Fabric外部链码构建与运行

将 ProGuard / Dexguard 与多个 Android Studio 模块一起使用

将 SafeArgs 与 Proguard 和导航架构组件一起使用时出现 ClassNotFoundException?

区块链与密码学第3-6讲:一课读懂Hyperledger Fabric