元のdex.batに追加された21.1.1でも--incremental --no-optimize
遅いので、私は何かを理解し続けました。結果は、dexに渡される.jarファイルをサイズ別に注文するとパフォーマンスが向上するということです。
更新についてはhttps://code.google.com/p/android/issues/detail?id=79166をご覧ください。彼らが同意し、これがvNextに反映されることを願っています。
#!/usr/bin/perl
use strict;
use warnings;
#use Data::Dump qw(dump);
use List::Util qw(first), qw(sum);
# size of the argument, -s for files, -s on **/*.class for folders
sub size {
if (-d $_) {
# directory size is sum of all class files in the dir recursively
# account for pre-dexing and compression with a 25% decrease
return sum(map { size($_) * 0.25 } <$_/*.class>) || 0;
}
return -s $_; # use built-in size operator
}
my $dx_args_with_args =
qr/^--(output|positions|(no-)?optimize-list|dump-(to|width|method)|num-threads|main-dex-list|input-list)$/;
my $nArgs = $#ARGV;
# last argument like --blah, those are for dx
my $lastArg = $nArgs - first { $ARGV[$nArgs - $_] =~ /^--/ } 0..$nArgs;
if ($lastArg != -1 && $ARGV[$lastArg] =~ /$dx_args_with_args/) {
$lastArg += 1;
}
my @inputs = map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map { [size(), $_] }
@ARGV[$lastArg + 1 .. $nArgs];
print join(" ", @ARGV[0..$lastArg], @inputs);
exit 0;
使用法
- あなたの道にPerlを持っている
- 上記のperlスクリプトをANDROID-SDK/build-tools / vvv/dx.plにコピーします
- ANDROID-SDK / build-tools / vvv /
Unixでdxの名前を変更
:Windowsに名前を変更:に名前dx
を変更dx-orig
dx.bat
dx-orig.bat
- 次を呼び出す新しい置換dxを追加します。
ウィンドウズ:
dx.bat
@echo off
setlocal
set args=%*
for /f "delims=" %%i in ('perl "%~dp0dx.pl" %args%') do set args=%%i
call "%~dp0dx-orig.bat" %args%
endlocal
Unix:
dx
#!/bin/sh
dx-orig `perl dx.pl $@`