meituan / WMRouter

WMRouter是一款Android路由框架,基于组件化的设计思路,有功能灵活、使用简单的特点。
https://tech.meituan.com/meituan_waimai_android_open_source_routing_framework.html
Apache License 2.0
2.31k stars 342 forks source link

release 不支持的跳转链接(404) #79

Closed yz1309 closed 3 years ago

yz1309 commented 4 years ago

`

buildTypes {

    debug {// debug模式运行能够跳转页面
        minifyEnabled false
        shrinkResources false
        signingConfig signingConfigs.dcc

    }

    release {// release 模式下运行跳转页面提示 404 
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.dcc

    }
}

`

yz1309 commented 4 years ago

微信截图_20200708183851

yz1309 commented 4 years ago

@jzj1993

jzj1993 commented 4 years ago

看下文档,是不是Proguard没有配置好

yz1309 commented 4 years ago

`

----- Glide BEGIN -----

-keep public class implements com.bumptech.glide.module.GlideModule -keep public class extends com.bumptech.glide.module.AppGlideModule -keep public enum com.bumptech.glide.load.ImageHeaderParser$ { [] $VALUES; public *; }

----- Glide END -----

----- OkHttp BEGIN -----

JSR 305 annotations are for embedding nullability information.

-dontwarn javax.annotation.**

A resource is loaded with a relative path so the package of this class must be preserved.

-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.

-dontwarn org.codehaus.mojo.animal_sniffer.*

OkHttp platform used only on JVM and when Conscrypt dependency is available.

-dontwarn okhttp3.internal.platform.ConscryptPlatform

Okio: Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.

-dontwarn org.codehaus.mojo.animal_sniffer.*

----- OkHttp END -----

----- Retrofit BEGIN -----

Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and

EnclosingMethod is required to use InnerClasses.

-keepattributes Signature, InnerClasses, EnclosingMethod

Retrofit does reflection on method and parameter annotations.

-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

Retain service method parameters when optimizing.

-keepclassmembers,allowshrinking,allowobfuscation interface { @retrofit2.http. ; }

Ignore annotation used for build tooling.

-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

Ignore JSR 305 annotations for embedding nullability information.

-dontwarn javax.annotation.**

Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.

-dontwarn kotlin.Unit

Top-level functions that can only be used by Kotlin.

-dontwarn retrofit2.KotlinExtensions

With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy

and replaces all potential values with null. Explicitly keeping the interfaces prevents this.

-if interface { @retrofit2.http. ; } -keep,allowobfuscation interface <1>

----- Retrofit END -----

The following line is a work around for the 'Value "i" is not a reference value' bug.

See https://stackoverflow.com/questions/32185060/android-proguard-failing-with-value-i-is-not-a-reference-value.

-optimizations !class/unboxing/enum

----- Supress proguard note for descriptors ----

See https://stackoverflow.com/a/36175170/4944176

-dontnote kotlin.jvm.internal.DefaultConstructorMarker -dontnote kotlin.coroutines. -dontnote com.google.android.material. -dontnote okhttp3.RequestBody -dontnote com.baidu. -dontnote com.scwang.smartrefresh. -dontnote com.viewpagerindicator. -dontnote com.contrarywind. -dontnote com.lwkandroid.widget.**

----- EventBus BEGIN -----

-keepattributes Annotation -keepclassmembers class { @org.greenrobot.eventbus.Subscribe ; } -keep enum org.greenrobot.eventbus.ThreadMode { ; }

----- EventBus END -----

保留ServiceLoaderInit类,需要反射调用

-keep class com.sankuai.waimai.router.generated.ServiceLoaderInit { *; }

#

避免注解在shrink阶段就被移除,导致obfuscate阶段注解失效、实现类仍然被混淆

-keep @interface com.sankuai.waimai.router.annotation.RouterService

#

使用了RouterService注解的实现类,需要避免Proguard把构造方法、方法等成员移除(shrink)或混淆(obfuscate),导致无法反射调用。实现类的类名可以混淆。

-keepclassmembers @com.sankuai.waimai.router.annotation.RouterService class { ; }`

jzj1993 commented 4 years ago

反编译一下apk看看有那些类,然后打断点调试分析下就好了,原理不复杂