Переопределение атрибута 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 будет применяться соответствующее значение на основе типа сборки.