安装apk时是否有可能将一个apk中的所有dex转为燕麦?

时间:2014-07-03 04:06:07

标签: android dex android-runtime dex2oat

我在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主人

这是否意味着如果APK在根目录中有多个dex,dex2oat会在使用ART时将所有DEX变成OAT吗?

安装apk时如何将所有dex转为燕麦?

1 个答案:

答案 0 :(得分:2)

  

这是否意味着如果APK在根目录中有多个dex,则dex2oat将全部转为   使用ART时可以使用DEX吗?

是。燕麦文件结构&#34;包含&#34;许多dex文件:

oat file structure

图片取自Paul Sabanal的slides

  

现在,我在安装apk时如何将所有dex转为燕麦。

这在安装过程中自动完成。