警告:找不到引用的类

Posted

技术标签:

【中文标题】警告:找不到引用的类【英文标题】:Warning:can't find referenced class 【发布时间】:2019-03-17 04:35:49 【问题描述】:

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

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

重写apply,一切正常...

【讨论】:

以上是关于警告:找不到引用的类的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot中使用 Redisson 版本冲突导致的类找不到

Proguard 导致 100 个“找不到引用的类”警告,忽略 springframework 和 jackson 的保留规则

eclipse集成tomcat运行web时提示引入jar包的类找不到的解决办法

Q开头的类找不到,无法加载插件:com.mysema.maven:apt-maven-plugin

Android ProGuard警告 - 找不到引用的类“com.zhihu.matisse.R $ plurals”

Android 警告:com.bbn.openmap.MapBean:找不到引用的类 java.awt.geom.Point2D