В SBT Android Plugin в proguardTask есть значение proguardInJars
.
В моем простом тестовом проекте он содержит C:\Users\Administrator\.sbt\boot\scala-2.9.1\lib\scala-library.jar
.
Затем он объединяется с моими собственными скомпилированными классами в другое значение inJars
.
Однако он объединяется, добавляя что-то к нему. Вот код из jberkel/android-plugin, который делает это:
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
работал без проблем?
Плагин 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
, чтобы отобразить более подробную информацию об обобщенном формате пути к классам, который использует ProGuard.