【问题标题】:Proguard in release mode发布模式下的 Proguard
【发布时间】:2018-04-19 22:46:50
【问题描述】:

我正在通过工作室安装应用程序,我猜这是即时运行

我猜我的代码没有 缩小,因为我的 apk 仍然是 16.1 MB 大,除了 sinch 库之外什么都没有...... p>

buildTypes {    
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
}

不知道我是否必须在即时运行中添加这个.....

debug {
        minifyEnabled true
        useProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
 }

但是当使用调试时它会显示:

Gradle 构建过程失败并显示“错误:任务执行失败 ':app:transformClassesWithNewClassShrinkerForDebug'。 > 发现警告 在收缩过程中,请使用 -dontwarn 或 -ignorewarnings 来抑制 他们。” - Proguard #206

不知道我的应用是否处于 release 模式如果它不是处于发布模式,那么我想当我处于发布模式时我会收到 same 错误但是如果这是 debugger 的问题并且我已经处于 release 模式,那么为什么我的应用没有 shrinking

请帮忙!

【问题讨论】:

    标签: android sinch


    【解决方案1】:

    如错误消息中所述,您应该在应用模块的 proguard-rules.pro 文件中使用 -dontwarn

    例子:

    -dontwarn javax.management.**
    -dontwarn java.lang.management.**
    -dontwarn org.json.JSONObject
    -dontwarn org.apache.commons.codec.binary.Base64
    -dontwarn org.apache.commons.logging.LogFactory
    -dontwarn org.apache.log4j.Logger
    -dontwarn org.apache.log4j.Level
    -dontwarn org.slf4j.LoggerFactory
    -dontwarn org.slf4j.Logger
    -dontwarn org.slf4j.impl.StaticMDCBinder
    -dontwarn org.slf4j.impl.StaticMarkerBinder
    -dontwarn org.apache.http.entity.mime.content.FileBody
    -dontwarn org.apache.http.entity.mime.MultipartEntity
    -dontwarn org.apache.http.entity.mime.FormBodyPart
    -dontwarn org.apache.http.entity.mime.MinimalField
    -dontwarn org.apache.http.entity.mime.HttpMultipart
    -dontwarn org.apache.http.entity.mime.content.AbstractContentBody
    -dontwarn org.apache.http.entity.mime.content.StringBody
    -dontwarn org.apache.http.entity.mime.content.InputStreamBody
    -dontwarn org.apache.http.entity.mime.MIME
    -dontwarn android.support.v4**
    -dontwarn com.google.**
    

    Google 应该为您在项目中使用的库隐藏什么,

    祝你好运

    【讨论】:

    • 但是我的 jniLibs 非常大,它有 4 个文件夹 armeabi-v7a、arm64-v8a、x86 和 x86_64,因为我仅将 sinch 用于应用程序调用我猜它包括所有功能对于 sinch 在其 sdk 中提供的应用程序电话呼叫、消息传递等,不知道如何排除这些.....
    • 我在 sinch proguard txt -keepclasseswithmembernames class * { native ; }
    • 你已经看到我只在发布时缩小,所以如果我从工作室运行这个应用程序,将它安装在我的移动设备上,使用 shareIT 与其他移动设备共享它并查看 apk 大小它会是什么?会不会减少?记得我在 release 中使用了 shrinker 和 minify
    • 不工作,之前是 16.1 MB,之后是 16.1 MB
    • 您在调试模式下也使用了 minifyEnabled = true,因此您的应用程序应该在调试模式下缩小或给出相同的错误消息,如果没有发生这种情况,请确保运行执行 AssembleDebug gradle 命令并且什么都没有否则,这样应该更容易看出 proguard 规则有什么问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多