2015-06-18 3 views
0

Я пытаюсь понять, как работает ProGuard в проекте Android, построенном с помощью Gradle.Почему ProGuard не запутывает эти классы?

Учитывая мой Gradle DSL:

buildTypes { 
    debug { 
     versionNameSuffix = ".D" 
    } 
    release { 
    } 
    all { 
     minifyEnabled = true 
     proguardFile "proguard-configur.txt" 
    } 
} 

И учитывая мой Proguard-configur.txt файл:

# Allow obfuscation of android.support.v7.internal.view.menu.** 
# to avoid problem on Samsung(and other) 4.2.2 devices with appcompat v21 
# see https://code.google.com/p/android/issues/detail?id=78377 
-optimizations !class/merging/*,!code/allocation/variable 
-keepattributes ** 
-keep class !android.support.v7.internal.view.menu.**,** {*;} 
-keep class !android.support.** {*;} 
-dontpreverify 
-dontwarn ** 

поведение я бы ожидать здесь, чтобы все классы, но библиотеку поддержки, поэтому , библиотека поддержки будет запутана и оптимизирована. Тем не менее, он не оптимизирован, и не похоже, чтобы быть запутанным либо:

<root>: 64710 
    <default>: 1 
    android: 15856 
     accessibilityservice: 6 
     accounts: 23 
     animation: 38 
     app: 437 
     appwidget: 7 
     bluetooth: 2 
     content: 397 
      pm: 85 
      res: 95 
     database: 91 
      sqlite: 23 
     graphics: 275 
      drawable: 85 
       shapes: 2 
      pdf: 3 
     hardware: 4 
      display: 3 
     location: 35 
     media: 200 
      session: 72 
     net: 62 
      http: 6 
      wifi: 6 
     os: 236 
     preference: 22 
     print: 22 
      pdf: 5 
     provider: 15 
     speech: 6 
      tts: 6 
     support: 12406 
      annotation: 3 
      v4: 7030 
       accessibilityservice: 41 
       app: 1438 
       content: 232 
        pm: 1 
        res: 8 
       database: 3 
       graphics: 122 
        drawable: 96 
       hardware: 19 
        display: 19 
       internal: 74 
        view: 74 
       media: 1108 
        routing: 96 
        session: 766 
       net: 64 
       os: 21 
       print: 82 
       provider: 96 
       speech: 14 
        tts: 14 
       text: 88 
       util: 265 
       view: 2290 
        accessibility: 847 
       widget: 1072 
      v7: 5373 
       app: 458 
       appcompat: 15 
       cardview: 8 
       gridlayout: 7 
       internal: 2172 
        app: 267 
        text: 3 
        transition: 2 
        view: 608 
         menu: 512 
        widget: 1290 
       recyclerview: 1 
       view: 25 
       widget: 2687 
     telephony: 4 
     text: 53 
      method: 3 
      style: 4 
     transition: 16 
     util: 66 
     view: 807 
      accessibility: 164 
      animation: 35 
      inputmethod: 3 
     webkit: 73 
     widget: 553 

Итак, вопрос ясен: Почему не android.support и потомки затемненный и оптимизированы?

+0

Эй, почему -keep класса android.support.v7. internal.view.menu. **, ** {*;} -keep класс! android.support. ** {*;} - серые? это похоже на комментарий! Это правда или просто редактор? – Karoly

+0

Эй, @ Кароли, это просто автоматическая подсветка синтаксиса. Чтобы прокомментировать файлы конфигурации Proguard, мы используем '#'. – mdelolmo

ответ

0

Я думаю, что это должно быть minifyEnabled true не minifyEnabled = true, по крайней мере, это как в моем файле build.gradle и обфускации.

+1

Эй, minifyEnabled - свойство: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Types. В Gradle DSL это нормально с или без '='. – mdelolmo