0

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 がある場合、ART を使用すると dex2oat はすべての DEX を OAT に変換するということですか?

apk のインストール時にすべての dex をオート麦にするにはどうすればよいですか?

4

1 に答える 1

2

APK のルート ディレクトリに複数の dex がある場合、ART を使用すると dex2oat がすべての DEX を OAT に変換するということですか?

はい。oat ファイル構造には多くの dex ファイルが「含まれています」:

oat ファイル構造

ポール・サバナルのスライドからの写真。

そして今、apkのインストール時にすべてのdexをoatに変える方法.

これは、インストール中に自動的に行われます。

于 2014-10-31T14:40:03.163 に答える