2013-10-07 10 views
22

Widzę skrypt mrówki Androida, który informuje, że jest "wstępnym dexingiem". Jednak dex i prepix używają tych samych opcji, z wyjątkiem jednego słoika na raz, w innym przypadku wielu słoików jednocześnie.Co to jest Android Pre-Dexing i jak to zrobić, aby zwiększyć wydajność?

Jaka jest prawdziwa potrzeba? Czy pre-deks jest obowiązkowy?

np

The ' characters around the executable and arguments are 
not part of the command. 
     [dex] Pre-Dexing F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\libs\pinit-sdk-1.0.jar -> pinit-sdk-1.0-e3bebafa2727504605edf3d8d85b5d46.jar 
     [dx] Current OS is Windows 7 
     [dx] Executing 'D:\Apps\java\embd\cmn\android\oems\google\adt\4.x\4.3.x\4.3\sdk\build-tools\18.1.0\dx.bat' with arguments: 
     [dx] '--dex' 
     [dx] '--output' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\pinit-sdk-1.0-e3bebafa2727504605edf3d8d85b5d46.jar' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\libs\pinit-sdk-1.0.jar' 
     [dx] 
     [dx] The ' characters around the executable and arguments are 
     [dx] not part of the command. 
Execute:Java13CommandLauncher: Executing 'D:\Apps\java\embd\cmn\android\oems\google\adt\4.x\4.3.x\4.3\sdk\build-tools\18.1.0\dx.bat' with arguments: 
'--dex' 
'--output' 
'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\pinit-sdk-1.0-e3bebafa2727504605edf3d8d85b5d46.jar' 
'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\libs\pinit-sdk-1.0.jar' 

The ' characters around the executable and arguments are 
not part of the command. 
     [dex] Converting compiled files and external libraries into F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\classes.dex... 
     [dx] Current OS is Windows 7 
     [dx] Executing 'D:\Apps\java\embd\cmn\android\oems\google\adt\4.x\4.3.x\4.3\sdk\build-tools\18.1.0\dx.bat' with arguments: 
     [dx] '--dex' 
     [dx] '--output' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\classes.dex' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\classes' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\classes-144740ee5cf8b90b747300d19fb8201e.jar' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\classes-1593da1bb60c5ec741aca494963e04a3.jar' 
     [dx] 'F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\classes-37bb5269e4fbd6dda9900fea95c0c29b.jar' 
+1

Ten proces wstępnego dekodowania jest wykonywany dla bibliotek zewnętrznych, które mógłbyś włączyć do projektu. Drugi proces dexowania dotyczy twojej aplikacji (.class do .dex [DEX jest bardziej odpowiedni dla systemów ograniczonych w pamięci i szybkości]). Pre-Dexing jest wymagany za każdym razem, gdy tworzysz aplikację, ponieważ: 1) Jakiś kod w aplikacji (pobrany z zewnętrznej biblioteki) może nie działać poprawnie. 2) Biblioteka (którą możesz pobrać z zewnętrznej strony) mogła zostać skompilowana ze starym kompilatorem Java (SDK Tools zgłasza to ostrzeżenie). – 10101010

Odpowiedz

19

Jest to użyteczne, aby pamiętać, że w tym przypadku użytkownik pracuje w Javie, co nie jest dokładnie takie samo jak w czasie wykonywania Dalvik. Java, od Oracle, używa zupełnie innej maszyny wirtualnej, podczas gdy Dalvik jest specjalnie dostrojony do urządzeń mobilnych.

Procesy DEX pobierają skompilowane pliki Java JAR i konwertują je do plików wykonywalnych Dalvi (.dex), które będą działać na systemie Android. Oracle JVM używa innego kodu bajtowego niż środowisko wykonawcze Dalvik, co czyni ten krok koniecznością.

Istnieje proces dla bibliotek, które można uwzględnić w projekcie, ponieważ są one również kompilowane przy użyciu standardowego kompilatora Java, a następnie inny proces dla rzeczywistego projektu.

Zrobiono to w dwóch etapach, ponieważ końcowy proces, Twoja aplikacja, wymaga dostępu do już zdejonowanych plików biblioteki, aby uniknąć odniesienia do zmiany kodu, gdy proces jest zajęty.

Możesz dowiedzieć się więcej na http://source.android.com/devices/tech/dalvik/index.html - gdzie zobaczysz także, że Dalvik ma zostać zastąpiony czymś, co nazywa się ART.