Android proguard,保持Inner class的inner class

Posted

技术标签:

【中文标题】Android proguard,保持Inner class的inner class【英文标题】:Android proguard, keep inner class of Inner class 【发布时间】:2017-01-31 21:33:25 【问题描述】:

家长提问:android proguard, keep inner class

我的问题是内部类的内部类

我的 android 项目中的一个 SDK 有一个类 A,它有两个静态内部类。应用proguard后发现它们被剥离了。

public class A
  ....

  static class B
    ...
    static class D 
        ....
    

  

  static class C
    ...
  

我的proguard是这样的

-keepattributes Exceptions, InnerClasses
-keep class com.xxx.A
-keep class com.xxx.A$*

这会阻止 B、C 类的 proguard。但是 D 类没有运气。我也尝试过-keep class com.xxx.A$**

【问题讨论】:

@TGMCians 不工作 试试这个-keep class com.xxx.*$* $ 也不起作用,但是 -dontwarn com.xxx.** 让我的构建成功。我想我应该稍后再做。 您是否需要使用通配符的表达式,或者您会满足于只针对一个类的答案?? 【参考方案1】:

我认为您缺少 ProGuard manual 中显示的类规范。

尝试替换:

-keep class com.xxx.A

与:

-keep class com.xxx.** *;

我在以下文件中使用该规则,它在带有构建工具 25.0.1 的 Android Studio 2.2.3 上运行良好(以防这些可能影响正在使用的 ProGuard 版本)

A.java

package com.xxx;

public class A 
  ....

  public class B 
    ....

    public class C 
    ....
    
  

如您所见,我的文件和您的文件之间唯一真正的区别是我的内部类是公共的和非静态的。

如果这不起作用

您始终可以使用不带通配符的规则。以下方法可以解决问题:

-keep class com.xxx.A$B$D

【讨论】:

以上是关于Android proguard,保持Inner class的inner class的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Android 升级 ProGuard?

android studio解决warning: Ignoring InnerClasses attribute for an anonymous inner class

Android Studio 之 warning: Ignoring InnerClasses attribute for an anonymous inner class

在 Android Facebook sdk 3.0 中使用 proguard 时出错

ProGuard 的“保持”论点的概括

Proguard 混淆时保持类“实现”