本来我用shizuku api写的UserService,在debug构建下是能够正常连接到Shizuku进程的。但是用release模式构建打包后就连不上了
这是因为,在调用Shizuku.bindUserService(serviceArgs, serviceConnection)时,shizuku会根据serviceArgs中的服务类名绑定服务,但在release构建过程中,我们的服务实现类名会被Proguard优化混淆掉。所以解决方案就是在proguard-rules.pro文件中添加以下排除规则
# 保留 Shizuku 相关类
-keep class rikka.shizuku.** { *; }
# 保留自定义的 UserService 类及 AIDL 接口
-keep class com.lyneon.cytoidinfoquerier.service.FileService { *; }
-keep class com.lyneon.cytoidinfoquerier.IFileService { *; }
-keep interface com.lyneon.cytoidinfoquerier.IFileService { *; }
# 保留 ServiceConnection 和 Binder 相关方法
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
之后再重新构建release包应该就没问题了