Как настроить dexguard для сборок jenkins в приложении с несколькими вариантами?

У меня есть приложение с несколькими вариантами, в котором я использую dexguard, и я решил настроить его на Jenkins. Лицензии Dexguard находятся в /app/flavor/ для каждой лицензии, но Jenkins всегда берет лицензию из последней версии. Сборка завершается с ошибкой с кодом:

Имя пакета из файла AndroidManifest.xml [com.example.android.flavor1.something] не соответствует имени пакета [com.example.android.flavor6.something,com.example.android.flavor6.test,com. example.android.flavor6.something.prod,com.example.android.flavor6.test] из вашей лицензии DexGuard [C:\Users\CurrentUser\AndroidStudioProjects\MyApp\flavor6\dexguard-license.txt]

Я попытался переименовать dexguard.license в dexguard-licenseX.txt (где X — это номер варианта) и настроить в файле flavors build.gradle поиск этого имени, который даже не смог найти файл лицензии. Я также попытался настроить расположение лицензии в gradle.properties с помощью systemProp.dexguard.licence=./flavor1.

сейчас я использую

release {
     System.properties['dexguard.license'] = buildscript.sourceFile.parent
     proguardFiles getDefaultDexGuardFile('dexguard-release.pro'), 'dexguard-rules.pro', 'proguard-rules.pro'
}

И это работает только в том случае, если я пытаюсь собрать последний вариант, в противном случае мне приходится копировать dexguard-license в домашнюю папку (что не является проблемой локально, но это проблема на Jenkins).

Есть ли способ настроить dexguard на jenkins?


person isaaaaame    schedule 05.07.2019    source источник


Ответы (2)


dexguard-license1.txt учитываться не будет, начните с dexguard-license2.txt, если у вас есть дополнительные файлы лицензии.

person T. Neidhart    schedule 05.07.2019
comment
` Не удается найти файл лицензии DexGuard. Вы должны разместить файл лицензии dexguard-license.txt 1) в месте, определяемом системным свойством Java 'dexguard.license', 2) в местоположении, определяемом переменной среды ОС 'DEXGUARD_LICENSE', 3) в вашем домашнем каталоге, 4) в пути к классу или 5) в том же каталоге, что и jar DexGuard (не работает в сочетании с Gradle v3.1+). ` @Т. Нейдхарт - person isaaaaame; 05.07.2019

Решено: добавлен этот код в build.gradle каждого модуля:

def getCurrentModule() {
Gradle gradle = getGradle()
String  tskReqStr = gradle.getStartParameter().getTaskRequests().toString()

if(tskReqStr.indexOf( ":currentModule:" ) >= 0 )
    return ":currentModule:"
else
  {
    println "NO MATCH FOUND"
    return ""
  }
}

и это в buildTypes-релизе:

if (getCurrentModule() == ":currentModule:") {
            System.properties['dexguard.license'] = buildscript.sourceFile.parent
        }
        proguardFiles getDefaultDexGuardFile('dexguard-release.pro'), 'dexguard-rules.pro', 'proguard-rules.pro'
person isaaaaame    schedule 08.07.2019