【问题标题】:Proguard can't find referenced class after migration to Kotlin迁移到 Kotlin 后 Proguard 找不到引用的类
【发布时间】:2019-07-18 15:50:28
【问题描述】:

我得到一个看起来很简单的 ProGuard 错误,说找不到引用的类。该错误发生在将类从 Java 迁移到 Kotlin 之后。

Warning: com.x.android.ui.ads.offerwall.OfferWallLoader$initIronSrc$1$1$run$1$1: can't find referenced class com.x.android.ui.ads.offerwall.OfferWallLoader$initIronSrc$1$1
Warning: com.x.android.ui.ads.offerwall.OfferWallLoader$initIronSrc$1$1$run$1$1: can't find referenced class com.x.android.ui.ads.offerwall.OfferWallLoader$initIronSrc$1$1

问题是我试图将它保存在 proguard 文件中,但看起来它没有效果..

-keep class com.x.android.ui.ads.offerwall.OfferWallLoader$initIronSrc$* { *;}

我不确定在名称中的 $ 后面保留类或成员时的区别。 我该如何解决它,我做错了什么?

编辑:这是迁移到 Kotlin 的失败代码(代码已简化):

private fun initIronSrc(activity: Activity) {
    synchronized(initIronSrcLock) {
        if (isIronSourceInitialised) {
            return
        }

        MyStaticClass.callAsync(object : BackgroundRunnable() {
            override fun run(backgroundServiceAccess: BackgroundServiceAccess) {
                synchronized(initIronSrcLock) {
                    if (isIronSourceInitialised) {
                        return
                    }

                    // Init IronSource
                }
            }
        })
    }
}

通知无法访问initIronSrc$1$1$run$1$1

【问题讨论】:

    标签: proguard


    【解决方案1】:

    经过一些挖掘和调查,结果发现这是 Jetbrains 跟踪的问题:https://youtrack.jetbrains.com/issue/KT-16084

    基本上:Proguard 在应用闭包中找不到 let 闭包的封闭类 所以,似乎是嵌套类或嵌套调用的问题。

    在我的例子中,我在 synchronized 块中封装了一个静态方法调用,因此 proguard 无法解析调用。

    解决方案是从该块中取出调用。在这种情况下,无论如何都可以处理同步,确保代码的单一使用和单一的合作者初始化:

    private fun initIronSrc(activity: Activity) {
        synchronized(initIronSrcLock) {
            if (isIronSourceInitialised) {
                return
            }
        }
    
        MyStaticClass.callAsync(object : BackgroundRunnable() {
            override fun run(backgroundServiceAccess: BackgroundServiceAccess) {
                synchronized(initIronSrcLock) {
                    if (isIronSourceInitialised) {
                        return
                    }
    
                    // Init IronSource
                }
            }
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 2012-09-16
      • 2014-06-23
      • 2012-09-28
      • 2020-07-12
      • 2012-10-13
      • 2011-10-21
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多