Можно ли при установке apk превратить все dex в одном apk в oat?

Я нашел этот код в Android:

bool DexFile::OpenFromZip(const ZipArchive& zip_archive, const std::string& location,
                          std::string* error_msg, std::vector<const DexFile*>* dex_files) {
    ZipOpenErrorCode error_code;
    std::unique_ptr<const DexFile> dex_file(Open(zip_archive, kClassesDex, location, error_msg,
                                               &error_code));
    if (dex_file.get() == nullptr) {
      return false;
    } else {
      // Had at least classes.dex.
      dex_files->push_back(dex_file.release());

      // Now try some more.
      size_t i = 2;
      while (i &lt 100) {
      // We could try to avoid std::string allocations by working on a char array directly. As we
      // do not expect a lot of iterations, this seems too involved and brittle.
      std::string name = StringPrintf("classes%zu.dex", i);
      std::string fake_location = location + ":" + name;
      std::unique_ptr<const DexFile> next_dex_file(Open(zip_archive, name.c_str(), fake_location,
                                                        error_msg, &error_code));
      if (next_dex_file.get() == nullptr) {
        if (error_code != ZipOpenErrorCode::kEntryNotFound) {
          LOG(WARNING) << error_msg;
        }
        break;
      } else {
        dex_files->push_back(next_dex_file.release());
      }

      i++;
    }

    return true;

от https://android.googlesource.com/platform/art/+/master/runtime/dex_file.cc master

Означает ли это, что если APK имеет multi dex в корневом каталоге, dex2oat при использовании ART превратит все DEX в OAT?

Как я могу превратить все dex в oat при установке apk?

1 ответ

Решение

Означает ли это, что если APK имеет multi dex в корневом каталоге, dex2oat при использовании ART превратит все DEX в OAT?

Да. Структура файла oat "содержит" много файлов dex:

структура овсяного файла

Фото сделано со слайдов Пола Сабанала.

А теперь, как я могу превратить все dex в oat при установке apk.

Это делается автоматически во время установки.

Другие вопросы по тегам