Переопределение атрибута android: vmSafeMode для отладочных сборок
при попытке оптимизировать скорость сборки и развертывания для отладки приложения я обнаружил, что большой кусок времени был потрачен на выполнение /system/bin/dex2oat
во время установки. Это искусство впереди времени компилятор.
Я нашел при таргетинге API 22 Теперь вы можете остановить компиляцию ART AOT:
<application
...
android:vmSafeMode="true">
</application>
Я видел заметное улучшение скорости развертывания, однако у меня есть опасения в отношении возможных побочных эффектов этого изменения. Это должно вызвать небольшую среду выполнения производительность хит, но есть ли какие-либо другие последствия включения ?
можно ли переопределить этот атрибут для отладочных сборок в файле сборки gradle? Или создание файла манифеста отладки является единственным решением?
2 ответов
лучший способ включить android:vmSafeMode
для вашей сборки отладки только с помощью манифеста отладки для дополнения содержимого вашего основного AndroidManifest.XML.
чтобы добавить это, создайте новый файл …/app/src/debug/AndroidManifest.xml
и добавьте следующий xml:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:vmSafeMode="true" />
</manifest>
после добавления этого манифеста отладки и установки приложения вы должны проверить вывод logcat устройства, чтобы убедиться, что флаг vmSafeMode правильно применяется, когда
Я возрождаю это для потомков, потому что я знаю более чистый подход.
вы можете использовать заполнители манифеста в gradle, чтобы избежать дублирования всего файла манифеста.
в свою сборку.gradle добавить следующее:
default {
manifestPlaceholders = [vmSafeModeEnabled: "true"]
}
buildTypes{
release {
manifestPlaceholders = [vmSafeModeEnabled: "false"]
}
}
а затем в манифесте используйте это вместо
android:vmSafeMode="${vmSafeModeEnabled}"
при запуске сборки gradle будет применяться соответствующее значение на основе типа сборки.