【问题标题】:Could not compute caller for function: public constructor Error when enable proguard in Android无法计算函数的调用者:在 Android 中启用 proguard 时的公共构造函数错误
【发布时间】:2022-06-12 17:22:19
【问题描述】:

该项目在没有启用 proguard 的情况下运行良好,启用它时问题就来了,我正在使用 Moshi 转换器和 Coroutines 的改造来获取数据列表,以及用于 DI 的 Hilt,我添加了所有规则并保留了所有模型

这是错误:

无法计算函数的调用者:公共构造函数 MovieListEntity(movie_data: kotlin.collections.List<com...domain.entities.MovieData>) 定义在 com...domain.entities.MovieListEntity[c@dad1eb0] (成员 = null)

这些是提到的类

data class MovieListEntity(
     @field:Json(name = "movie_data")
     val movie_data: List<MovieData>
)
data class MovieData(
    @field:Json(name = "movie_id")
    val movie_id: Int,
    @field:Json(name = "sub_title")
    val sub_title: String,
    @field:Json(name = "title")
    val title: String
)

注意:我也尝试过没有注释,但没有帮助

这些是proguard规则:

-keep class com.***.***.domain.entitie.** { *; }
-keep class com.***.***.domain.entities.*
-keep class com.***.***.domain.entities.MovieListEntity
-keep class com.***.***.domain.entities.MovieData

-keep class com.***.***.DataBinderMapperImpl { *; }
-keep class com.***.***.DataBinderMapperImpl { *; }
-keep  class com.***.*****{
    public ** component1();
  <fields>;
 }

加上其他改造规则,OkHttp,hilt .. 等。

我该如何解决这个错误?

【问题讨论】:

    标签: android kotlin security proguard data-class


    【解决方案1】:

    解决了通过添加这些规则

    -keepclassmembers class kotlin.Metadata {
        public <methods>;
    }
    
    -keepclassmembers class * {
        @com.squareup.moshi.FromJson <methods>;
        @com.squareup.moshi.ToJson <methods>;
    }
    
    -keepnames @kotlin.Metadata class com.******.domain.entities.**
    -keep class com.******.domain.entities.** { *; }
    -keepclassmembers class com.*****.domain.entities.** { *; }
    

    问题出在莫西图书馆, check this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      相关资源
      最近更新 更多