Android O、N版本修改dex2oat编译选项,减少占用ROM空间或者加快安装速度 内容 (2018-02-09)    

Android O版本、AndroidN版本

1.ROM过大可以通过调整--compiler-filter,减少apk生成odex文件所占据空间的大小,通常来说odex+vdex文件越大,说明dex2oat优化的类越多越彻底,性能也相对较好;

2.Apk安装时间过长可以通过调整--compiler-filter,加快安装;

     

修改dex2oat的--compiler-filter选项;

oat_location_为要修改apk的关键字,通常使用包名,比如微信:com.tencent.mm;

 

/art/dex2oat/dex2oat.cc

 

  void ParseArgs(int argc, char** argv) {

    original_argc = argc;

    original_argv = argv;

 

    InitLogging(argv, Runtime::Abort);

 

    // Skip over argv[0].

    argv++;

    argc--;

 

    if (argc == 0) {

      Usage("No arguments specified");

    }

……

      } else if (option.starts_with("--dirty-image-objects=")) {

        dirty_image_objects_filename_ = option.substr(strlen("--dirty-image-objects=")).data();

      }  else if (!compiler_options_->ParseCompilerOption(option, Usage)) {

        Usage("Unknown argument %s", option.data());

      }

    }

 

          /** MTK begin */

            if(oat_location_ != "" && (oat_location_.find("mtk14456") != std::string::npos || oat_location_.find("com.tencent.mm")!= std::string::npos)){

                        LOG(INFO) << "MTK oat_location_=" << oat_location_ << ",SetCompilerFilter=CompilerOptions::kQuicken";

                        compiler_options_->SetCompilerFilter(CompilerFilter::kQuicken);

            }

            /** MTK end */

           

    ProcessOptions(parser_options.get());

 

    // Insert some compiler things.

    InsertCompileOptions(argc, argv);

  }

 

 

下面以Android O版本,微信6.6.2为例:

步骤:

1.下载weixin.apk,重命名为weixin.zip;解压缩,把所有的dex文件push到sdcard

2.adb shell,然后执行下面的命令:

./system/bin/dex2oat --oat-file=/sdcard/mtk14456tools_everything.odex --dex-file=/sdcard/classes.dex --dex-file=/sdcard/classes2.dex --dex-file=/sdcard/classes3.dex --dex-file=/sdcard/classes4.dex --dex-file=/sdcard/classes5.dex --compiler-filter=everything

  1. --compiler-filter参数如下:

--compiler-filter=(assume-verified|extract|verify|quicken|space-profile|space|speed-profile|speed|everything-profile|everything)

 

通过上面可以得出下面数据:

 

Time为安装apk时dex2oat的时间;

Odex表示生成odex文件的大小;

Vdex表示生成vdex文件的大小;

 

--compiler-filter

Time

Total size(KB)

Odex(KB)

Vdex(KB)

assume-verified

3.228s

36657

653

36004

extract

2.499s

36657

653

36004

verify

7.616s

36904

653

36251

quicken

9.539s

38978

717

38261

space-profile

7.949s

38978

717

38261

space

27.425s

107608

71321

36287

speed-profile

7.810s

38978

717

38261

speed

52.815s

107608

71321

36287

everything-profile

7.415s

38978

717

38261

everything

53.364s

109544

73281

36263

 

表格统计数据是根据下面log和生成在sdcard的odex和vdex得出:

01-01 00:33:58.596 4332-4332/? I/dex2oat: StrippedCommandLine:./system/bin/dex2oat --oat-file=/sdcard/mtk14456tools_everything.odex --dex-file=/sdcard/classes.dex --dex-file=/sdcard/classes2.dex --dex-file=/sdcard/classes3.dex --dex-file=/sdcard/classes4.dex --dex-file=/sdcard/classes5.dex --compiler-filter=everything

01-01 00:34:51.958 4332-4332/? I/dex2oat: dex2oat took 53.364s (341.743s cpu) (threads: 8) arena alloc=27MB (28629200B) java alloc=24MB (25341840B) native alloc=128MB (135004032B) free=29MB (31195264B)

更多相关文章

  1. android sdk manager 更新不到最新资源列表解决办法—Missing SD
  2. 我的Android进阶之旅------>Android(安卓)关于arm64-v8a、armeab
  3. AndroidStudio使用技巧
  4. Drawable Resources Part I(Drawable 资源 第一部分)
  5. Android(安卓)应用的自动升级、更新模块的实现
  6. Qt for Android使用grpc探索
  7. 一行命令从 APK 文件中提取 Endpoint 及 URL
  8. 激进地用着Android(安卓)Studio
  9. Android文件存储读写

随机推荐

  1. Android实现九宫格
  2. android 集成腾讯bugly版本升级功能
  3. android 定时器的实现
  4. Android:EditText屏蔽输入法弹窗
  5. 学习心得(二)
  6. eclipse 配置android sdk和maven
  7. android Style样式
  8. android表格布局
  9. 启动AVD时候失败PANIC: ANDROID_SDK_HOME
  10. Android + jQuery Mobile