2012-07-04 2 views
1

В плагине Android SBT, в proguardTask, есть значение proguardInJars.
В моем простом тестовом проекте он содержит C:\Users\Administrator\.sbt\boot\scala-2.9.1\lib\scala-library.jar.Что такое семантика «proguardInJars» в Android-плагине SBT?

Затем он объединяется с моими скомпилированными классами в другое значение inJars.

Однако, он комбинируется, добавляя что-то к нему. Вот код из jberkel/андроида-плагин, который делает это:

val manifestr = List("!META-INF/MANIFEST.MF", "R.class", "R$*.class", "TR.class", "TR$.class", "library.properties") 
val sep = JFile.pathSeparator 
val inJars = ("\"" + classDirectory.absolutePath + "\"") +: proguardInJars.map("\"" + _ + "\""+manifestr.mkString("(", ",!**/", ")")) 

Мне интересно, кто-нибудь знает семантику этого добавленного материала.
Кроме того, если бы я должен был разбить inJars на отдельные значения, мне все же нужно было бы добавить этот файл манифеста в proguardInJars для того, чтобы proguardTask бежать без проблем?

ответ

1

Плагин android готовит аргумент командной строки injars для ProGuard в этот момент. ProGuard использует обобщенные пути к классам, чтобы выяснить, какие файлы из jar учитывать, а какие нет, формы файлов в банках.

Например, .../scala-library.jar(!META-INF/MANIFEST.MF,!**/R.class,!**/R$*.class,!**/TR.class,!**/TR$.class,!**/library.properties) означает, что файлы R/TR.class или файлы классов, начиная с R$/TR$ не должен (!) следует принимать во внимание в качестве входного сигнала.

Смотрите здесь:

http://proguard.sourceforge.net/index.html#manual/usage.html

Нажмите на class_path, чтобы показать более подробную информацию о обобщенном формате, который использует переменную среды CLASSPATH ProGuard.