【问题标题】:Warning:can't find referenced class警告:找不到引用的类
【发布时间】:2023-04-10 21:50:01
【问题描述】:

在 Kotlin 类中有一个名为 onDelete 的方法。

override fun onDelete(position: Int) {
    templates?.apply {
         val deleteDialog = DeleteTemplateDialog(view.getViewContext())
            deleteDialog.confirmListener = {
                CustomTemplateRepository.getInstance().deleTemplate(this[position].templateId!!)
                        .subscribe({
                            deleteDialog.dismiss()
                            this.removeAt(position)
                            customTemplateAdapter?.notifyDataSetChanged()
                            view.showEmptyView(this.isEmpty())
                        }, {})
            }
    }
}

当我构建 release-apk 时,我启用了proguard,但由于以下警告而失败。

警告:com.uniquestudio.android.iemoji.module.library.customtemplate.MyTemplatePresenter$onDelete$1$1$2:找不到引用的类 com.uniquestudio.android.iemoji.module.library.customtemplate.MyTemplatePresenter$onDelete$1 $1

当我使用 dex2jar 从 debug-APK 中检索此类时。我明白了。

public void onDelete(final int paramInt)
{

    final DeleteTemplateDialog localDeleteTemplateDialog = new DeleteTemplateDialog(this.view.getViewContext());
    localDeleteTemplateDialog.setConfirmListenner((Function0)new Lambda(localArrayList)
    {
    public final Disposable invoke()
    {
        CustomTemplateRepository localCustomTemplateRepository = CustomTemplateRepository.Companion.getInstance();
        String str = ((Template)this.receiver$0.get(paramInt)).getTemplateId();
        if (str == null) {
        Intrinsics.throwNpe();
        }
        localCustomTemplateRepository.deleTemplate(str).subscribe((Action)new Action()
        {
        public final void run()
        {
            this.this$0.$deleteDialog.dismiss();
            this.this$0.receiver$0.remove(this.this$0.$position$inlined);
            CustomTemplateAdapter localCustomTemplateAdapter = MyTemplatePresenter.access$getCustomTemplateAdapter$p(this.this$0.this$0);
            if (localCustomTemplateAdapter != null) {
            localCustomTemplateAdapter.notifyDataSetChanged();
            }
            this.this$0.this$0.getView().showEmptyView(this.this$0.receiver$0.isEmpty());
        }
        }, (Consumer)MyTemplatePresenter.onDelete.1.1.2.INSTANCE);
    }
    });
}

我不知道:

  • 谁是com.uniquestudio.android.iemoji.module.library.customtemplate.MyTemplatePresenter$onDelete$1$1$2
  • 谁是com.uniquestudio.android.iemoji.module.library.customtemplate.MyTemplatePresenter$onDelete$1$1
  • 为什么第一个找不到引用的类

【问题讨论】:

  • 你试过“-dontwarn”吗,比如这里:stackoverflow.com/a/7003061/1438493?似乎是类似的问题。
  • 你能添加你的 proGuard 配置吗?似乎它可能正在缩小类或方法名称,然后代码无法找到它们。
  • 要获取有关类结构的更多信息,您可以查看构建文件夹。在那里你应该找到这些类。我认为MyTemplatePresenter$onDelete$1$1$2 是错误消费者{},因此MyTemplatePresenter$onDelete$1$1 应该是确认监听器。

标签: java android kotlin proguard


【解决方案1】:

好像是kotlin的问题,问题可以看这里: https://youtrack.jetbrains.com/issue/KT-16084

重写apply,一切正常...

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2016-08-05
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多