Как сгенерировать подписанный и неподписанный APK с помощью градиента?

Мне нужно сгенерировать как беззнаковые, так и подписанные apks с помощью командной строки gradlew assembleRelease (gradlew assembleRelease - это команда im, использующая сейчас)

Апки должны быть выровнены. Я проверил это: Build Unsigned APK с Gradle, но, похоже, это старый способ добиться этого, теперь он не работает и что-то изменилось в последних версиях компиляции android и gradle. А также мне нужно сгенерировать оба apks одновременно, не только режим выпуска или неподписанный режим

Ответы

Ответ 1

Я думаю, что buildTypes является более подходящим местом, чем productFlavors.
Вы можете расширить свою версию релиза с заменой signedConfig.

buildTypes {
    release {
        ....
        signingConfig signingConfigs.release
    }

    releaseUnsigned.initWith(buildTypes.release)
    releaseUnsigned {
        signingConfig null
    }
}

Затем для создания обоих APK файлов:

./gradlew assemble

Или если вы хотите только выпускать сборки

./gradlew assembleRelease assembleReleaseUnsigned
or ./gradlew assR assRU

Если вы действительно хотите использовать только задачу assembleRelease, вы можете сделать эту зависимость

assembleRelease.dependsOn assembleReleaseUnsigned

И строить с помощью просто

./gradlew assembleRelease

Ответ 2

Ответ, на который вы ссылаетесь, верен - если выбранный вами вариант (например, тип сборки + комбинация вкуса) не использует конфиг подписи под подпиской, gradle создаст неподписанный APK.

Таким образом, вы можете определить настройку следующим образом:

android {
  signingConfigs {
    release { ... }
  }

  productFlavors {
    signed { 
      signingConfig signingConfigs.release // defined above
    }

    unsigned {} // use the default options
  }
}

Затем запустите ./gradlew :app:assembleRelease создаст ваши APK:

app/build/outputs/apk
├── app-signed-release.apk
├── app-signed-release-unaligned.apk
└── app-unsigned-release-unsigned.apk

Ответ 3

Я знаю, что это довольно старый ответ, но он все равно может помочь кому-то достичь вашей цели, не добавляя дополнительного вкуса (даже в моем случае это может быть сложно, потому что многие зависимости в проекте).

android {
  signingConfigs {
    release { ... }
  }

  productFlavors {
    signed { 
      signingConfig (checkUnsigned() ? null : signingConfigs.release)

    }
}

def checkUnsigned ()  {
    return project.hasProperty("unsigned")
}

Чтобы использовать его, просто используйте

gradle assembleRelease

или

gradle assembleRelease '-Punsigned'

для создания unsigned (кавычки для CI, иначе это может и не понадобиться)

Недостатком решения является то, когда вы хотите собрать несколько ароматов в одной строке, т.е.

gradle assembleRelease assembleDebug assembleRelease '-Punsigned'

assembleRelease проверяет все свойства в командной строке, так что сначала assembleRelease будет callse также с параметром '-Punsigned' Я разрешил эту проблему CI, используя две команды: одну для подписанной, другую для неподписанных версий

gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour