使用ProGuard混淆时出现NoSuchMethodException异常

3

嗯,生成发布版apk并使其正常工作变得很麻烦

实际上,我的apk已经成功构建,但是出现了一个方法错误

Caused by: java.lang.NoSuchMethodException: <init> [interface com.myapp.domain.login.LoginRepo]

现在,我的 proGuard 中有以下内容:
-keep class com.myapp.domain.** {*;}
-keep interface com.myapp.domain.** {*;}

现在,我不知道为什么会出现这个错误,因为我保留了这些接口和类,告诉我有关这个问题的错误行在这里

class LoginVMFactory(val repo:LoginRepo):ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return modelClass.getConstructor(LoginRepo::class.java).newInstance(repo)
    }
}

我在我的域包中也有这个LoginVMFactory,所以我也保留了这个类。我真的不知道为什么这会发生在发布之前,如果没有使用proGuard,应用程序可以正常工作,但我不希望它达到50mb,相反,使用proGuard可以将其缩小到只有10mb。
谢谢。
1个回答

1
问题在于我们需要在混淆时保留viewmodels,因此这行代码将保留所有继承自ViewModel类的类。
-keep public class * extends androidx.lifecycle.ViewModel {*;}

1
如果我不混淆我的虚拟机,为什么要使用R8呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接