Have you more correct smali/baksmali for test? Please upload them.
Last edited:
.line 76
const-class v1, [I
invoke-virtual {v1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class;
move-result-object v1
sput-object v1, TYPE:Ljava/lang/Class;
.line 76
const-class v1, [I
invoke-virtual/range-quick {v1}, vtable@20
move-result-object v1
sput-object v1, TYPE:Ljava/lang/Class;
.line 76
const-class v1, [I
iput-wide-volatile v0, v1, Landroid/system/OsConstants;->CAP_DAC_READ_SEARCH:I
move v0, v0
move-result-object v1
sput-object v1, TYPE:Ljava/lang/Class;
java -jar oat2dex.jar boot boot.oat
java -jar oat2dex.jar SystemUI.odex odex
@_riddle1. Get odex/dex boot class
Code:java -jar oat2dex.jar boot boot.oat
BOOTCLASSPATH=/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/apache-xml.jar:/system/framework/sec_edm.jar:/system/framework/timakeystore.jar:/system/framework/seccamera.jar:/system/framework/scrollpause.jar:/system/framework/stayrotation.jar:/system/framework/smartfaceservice.jar:/system/framework/commonimsinterface.jar:/system/framework/imsmanager.jar:/system/framework/sprengine.jar:/system/framework/smartbondingservice.jar:/system/framework/secocsp.jar:/system/framework/secEmailBC.jar:/system/framework/simageis.jar:/system/framework/qcmediaplayer.jar:/system/framework/WfdCommon.jar:/system/framework/oem-services.jar:/system/framework/org.codeauro
From the error message, it looks like the input file name is "boot".@_riddle
Step 1 provides java.io.FileNotFoundException: boot (The system cannot find not find the file specified). Boot.oat file is placed in same work folder that I am running command prompt for commanline functions (under MS Windows).
.......
boot.oat is compiled with all boot class path jars.
Once extract all dex from it, we have all boot classes.
java -jar oat2dex.jar boot boot.oat
@_riddle:Surprise to see my patch appears here...
Thanks to baksmali/smali author jesusfreke, the source has nice structure that is easy to extend.
For who may interest about the oat file format:
(Actually it is elf, oat header start from 4k address)
androidxref.com/5.0.0_r2/xref/art/compiler/oat_writer.h#34
The dex in oat file should be odex (not the same as dalvik) format.
Reference: androidxref.com/5.0.0_r2/xref/art/compiler/dex/dex_to_dex_compiler.cc
As below sample, optimized dex uses vtable offset to save function resolving time.
Correct(source) content
Odex content (Only extract from oat will get this)Code:.line 76 const-class v1, [I invoke-virtual {v1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class; move-result-object v1 sput-object v1, TYPE:Ljava/lang/Class;
Use original baksmali to force convert art's odex will get wrong instruction.Code:.line 76 const-class v1, [I invoke-virtual/range-quick {v1}, vtable@20 move-result-object v1 sput-object v1, TYPE:Ljava/lang/Class;
Pack these content to device will result unexpected runtime error.
About the purpose of the tools I made.Code:.line 76 const-class v1, [I iput-wide-volatile v0, v1, Landroid/system/OsConstants;->CAP_DAC_READ_SEARCH:I move v0, v0 move-result-object v1 sput-object v1, TYPE:Ljava/lang/Class;
It is to convert oat to legacy dex that allow original baksmali without patch can deassemble it correctly.
For example: SystemUI.odex (Actually it is an oat file)
1. Get odex/dex boot class
2. Deodex application (The parameter "odex" is folder path from step 1)Code:java -jar oat2dex.jar boot boot.oat
As dalvik, deodex application's odex will need to reference boot class to resolve what vtable mapping to.
3. Deassemble the output of step 2 by original baksmali.Code:java -jar oat2dex.jar SystemUI.odex odex
I only test on AOSP version, I am not sure whether manufacturer modified their own format.
If it does not work correctly, I have no idea without detail information (provide file, error message...).
@svadev@_riddle:
I try to use your tool for Samsung S5 and have get error.
Here is error, boot.oat, SystemUI.odex : ftp://79.120.63.235/err_oat2dex.zip
Added:
in Samsung boot.oat - oat header contains two additional fields:
oat_create_commands_info_size : uint32; // length of oat create command in bytes
oat_create_command:[FONT="] ubyte[[/FONT][FONT="]oat_create_commands_info_size] ; // aot create command command
and only after this follow dex files headers
[/FONT]
@svadev
Thanks for the information.
Finally I add a rough workaround to compatible with Samsung's format:
Read more 4 bytes as methods_offsets_ of structure OatDexFile when read unreasonable dex size.
Please try the attachment.
The output odex folder is just temporary. It can be deleted once dex files were generated.@_riddle
Thx for your great work!
Could I need deassemble with baksmali output files from boot from /odex/*.dex or from /dex/*.dex for correct deoxed framework's *.jar?
Files from which folder do I need deassemble?
@_riddleThe output odex folder is just temporary. It can be deleted once dex files were generated.
To deopt application, use "java -jar oat2dex.jar app.odex dex" will also work.
I added a easier function to get deodexed jars, but currently only include boot jars.
java -jar oat2dex_v03.jar auto
It will get all boot jar related files and generate deodexed jars to folder "result-jar".
(It will need to connect device and adb executable in environment path or same folder to work.)
g:\oat2dex>java -jar oat2dex.jar Launcher2.odex odex
12-21 07:55:01:793 Preparing bootclasspath from odex
12-21 07:55:03:088 De-optimizing /system/priv-app/Launcher2/Launcher2.apk
Exception in thread "main" org.jf.util.ExceptionWithContext: Unsupported instruction format: Format22cs
at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexW riter.java:1008)
at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeI tems(DexWriter.java:769)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter. java:222)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter. java:200)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool .java:99)
at dext.OatUtil.extractToDex(OatUtil.java:271)
at dext.OatUtil.oat2dex(OatUtil.java:140)
at dext.OatUtil.main(OatUtil.java:160)
@svadev
try: java -jar oat2dex_v04.jar auto <system-folder>
@Golv
Try Launcher again.
In this case, I print some messages like below, but it should be ok.
Risky resolved field from debug info. class=Lcom/android/launcher2/AppsCustomizePagedView; method=syncWidgetPageItems field-type=Landroid/content/pm/ResolveInfo; instruction-address=345
Due to check-cast is optimized out to 2 nop, and v21 is assigned by java/lang/Object, v14 has no information to refer its type that caused error.
[odex content of com.android.launcher2.AppsCustomizePagedView :: syncWidgetPageItems]
.line 1192
invoke-virtual {v9, v13}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
move-result-object v21
...
move-object/from16 v14, v21
.line 1214
nop
nop
.line 1215
.local v14, "info":Landroid/content/pm/ResolveInfo;
new-instance v12, Lcom/android/launcher2/PendingAddShortcutInfo;
.end local v12 # "createItemInfo":Lcom/android/launcher2/PendingAddItemInfo;
iget-object-quick v2, v14, field@0x8
After recover it from debug info, it looks correct.
[deodexed content]
...
new-instance v12, Lcom/android/launcher2/PendingAddShortcutInfo;
.end local v12 # "createItemInfo":Lcom/android/launcher2/PendingAddItemInfo;
iget-object v2, v14, Landroid/content/pm/ResolveInfo;->activityInfo:Landroid/content/pm/ActivityInfo;
@_riddle
H:\deodex>java -jar oat2dex.jar Maps.odex odex
12-23 09:05:13:025 Preparing bootclasspath from odex
12-23 09:05:13:228 De-optimizing /system/app/Maps/Maps.apk
12-23 09:05:16:181 Analysis error in class=Lcom/google/android/apps/gmm/map/util/d; method=<clinit>
12-23 09:05:16:181 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the field in class Lcom/google/android/apps/gmm/map/util/e; at offset 24 in <clinit>
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeIputIgetQuick(MethodAnalyzer.java:1561)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:968)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:205)
at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:140)
at dext.OatUtil$OatDexRewriter$1$1.getInstructions(OatUtil.java:596)
at org.jf.dexlib2.writer.pool.ClassPool.internCode(ClassPool.java:143)
at org.jf.dexlib2.writer.pool.ClassPool.intern(ClassPool.java:125)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:97)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
opcode: iget-quick
code address: 1492
method: Lcom/google/android/apps/gmm/map/util/d;-><clinit>()V
Exception in thread "main" org.jf.util.ExceptionWithContext: Unsupported instruction format: Format22cs
at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1008)
at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:769)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:222)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:200)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:99)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
H:\deodex>java -jar oat2dex.jar Music2.odex odex
12-23 09:07:10:915 Preparing bootclasspath from odex
12-23 09:07:11:103 De-optimizing /system/app/Music2/Music2.apk
vtableIndex=76 vtable.size()=75
vtableIndex=75 vtable.size()=75
vtableIndex=76 vtable.size()=75
vtableIndex=83 vtable.size()=75
vtableIndex=83 vtable.size()=75
vtableIndex=83 vtable.size()=75
vtableIndex=90 vtable.size()=75
12-23 09:07:16:462 Analysis error in class=Lcom/google/android/music/utils/MusicUtils; method=getSongListRadioMixDescrip
tor
12-23 09:07:16:509 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the method in class Lcom/google/android/
music/medialist/SongList; at index 90
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInvokeVirtualQuick(MethodAnalyzer.java:1659)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:976)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:205)
at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:140)
at dext.OatUtil$OatDexRewriter$1$1.getInstructions(OatUtil.java:596)
at org.jf.dexlib2.writer.pool.ClassPool.internCode(ClassPool.java:143)
at org.jf.dexlib2.writer.pool.ClassPool.intern(ClassPool.java:125)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:97)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
opcode: invoke-virtual/range-quick
code address: 247
method: Lcom/google/android/music/utils/MusicUtils;->getSongListRadioMixDescriptor(Landroid/content/Context;Lcom/google/
android/music/medialist/SongList;Z)Lcom/google/android/music/mix/MixDescriptor;
Exception in thread "main" org.jf.util.ExceptionWithContext: Unsupported instruction format: Format35ms
at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1008)
at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:769)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:222)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:200)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:99)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
H:\deodex>java -jar oat2dex.jar DocumentService.odex odex
12-23 09:08:39:650 Preparing bootclasspath from odex
12-23 09:08:39:837 De-optimizing /system/priv-app/DocumentService/DocumentService.apk
12-23 09:08:41:634 Analysis error in class=Lorg/apache/index/poi/hslf/record/RecordTypes; method=<clinit>
12-23 09:08:41:634 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the field in class Ljava/lang/Object; at
offset 8 in <clinit>
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeIputIgetQuick(MethodAnalyzer.java:1561)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:968)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:205)
at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:140)
at dext.OatUtil$OatDexRewriter$1$1.getInstructions(OatUtil.java:596)
at org.jf.dexlib2.writer.pool.ClassPool.internCode(ClassPool.java:143)
at org.jf.dexlib2.writer.pool.ClassPool.intern(ClassPool.java:125)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:97)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
opcode: iget-object-quick
code address: 1132
method: Lorg/apache/index/poi/hslf/record/RecordTypes;-><clinit>()V
12-23 09:08:42:322 Analysis error in class=Lorg/apache/poi/hslf/record/RecordTypes; method=<clinit>
12-23 09:08:42:322 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the field in class Ljava/lang/Object; at
offset 8 in <clinit>
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeIputIgetQuick(MethodAnalyzer.java:1561)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:968)
at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:205)
at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:140)
at dext.OatUtil$OatDexRewriter$1$1.getInstructions(OatUtil.java:596)
at org.jf.dexlib2.writer.pool.ClassPool.internCode(ClassPool.java:143)
at org.jf.dexlib2.writer.pool.ClassPool.intern(ClassPool.java:125)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:97)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
opcode: iget-object-quick
code address: 1385
method: Lorg/apache/poi/hslf/record/RecordTypes;-><clinit>()V
Exception in thread "main" org.jf.util.ExceptionWithContext: Unsupported instruction format: Format22cs
at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1008)
at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:769)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:222)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:200)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:99)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
H:\deodex>java -jar oat2dex.jar SamsungLinkPlatform.odex odex
12-23 09:10:08:025 Preparing bootclasspath from odex
12-23 09:10:08:212 De-optimizing /system/priv-app/SamsungLinkPlatform/SamsungLinkPlatform.apk
Exception in thread "main" org.jf.util.ExceptionWithContext: Unsupported instruction format: Format35ms
at org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1008)
at org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:769)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:222)
at org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:200)
at org.jf.dexlib2.writer.pool.DexPool.writeTo(DexPool.java:99)
at dext.OatUtil.extractToDex(OatUtil.java:322)
at dext.OatUtil.oat2dex(OatUtil.java:195)
at dext.OatUtil.main(OatUtil.java:71)
Thanks but most of apps in /app and /priv-app does not contain classes.dex inside after passing the whole procedure... (e.g. SamsungCamera3.apk, SecMms_Candy.apk ...)
64-bit Deodexer for Android Runtime (Version 3.5 от 20/07/2015) © Valery Studenikin, 2015
Path to stock /system directory: F:\TEMP\S6 Duos\G9200\firmware\G9200ZCU1AOFE_G9200CHC1AOFE_CHC\system
Android 5.0.2: SM-G9200, LRX22G.G9200ZCU1AOFE, changelist 4635752, Sun Jun 28 20:45:21 KST 2015
Processor architecture: \arm64\
Files deodexed succesfully: 365, with errors: 0. CPU time: 00:05:57 (357,134 sec.)
The necessary links for applications libraries:
symlink("/system/lib/libaed.so", "/system/app/AdvSoundDetector2015/lib/arm/libaed.so");
symlink("/system/lib/libfdb.so", "/system/app/AdvSoundDetector2015/lib/arm/libfdb.so");
symlink("/system/lib/libSamsungBCPP.so", "/system/app/AdvSoundDetector2015/lib/arm/libSamsungBCPP.so");
symlink("/system/lib/libasf_fileshare.so", "/system/app/AllshareFileShare/lib/arm/libasf_fileshare.so");
symlink("/system/lib/libasf_fileshareserver.so", "/system/app/AllshareFileShareServer/lib/arm/libasf_fileshareserver.so");
symlink("/system/lib/libasf_mediashare.so", "/system/app/AllshareMediaShare/lib/arm/libasf_mediashare.so");
symlink("/system/lib/libbluetooth_jni.so", "/system/app/Bluetooth/lib/arm/libbluetooth_jni.so");
symlink("/system/lib64/libnfc_nci_jni.so", "/system/app/NfcNci/lib/arm64/libnfc_nci_jni.so");
symlink("/system/lib64/libjni_pacprocessor.so", "/system/app/PacProcessor/lib/arm64/libjni_pacprocessor.so");
symlink("/system/lib/libmorpho_panorama_wa_for_viewer.so", "/system/app/Panorama360Viewer_Zero/lib/arm/libmorpho_panorama_wa_for_viewer.so");
symlink("/system/lib/libmorpho_sensor_fusion_for_viewer.so", "/system/app/Panorama360Viewer_Zero/lib/arm/libmorpho_sensor_fusion_for_viewer.so");
symlink("/system/lib/libcommonpawrapper.so", "/system/app/RootPA/lib/arm/libcommonpawrapper.so");
symlink("/system/lib/libnmsp_sk_speex.so", "/system/app/SamsungChineseIMEv9/lib/arm/libnmsp_sk_speex.so");
symlink("/system/lib/libapa_jni.so", "/system/app/SapaMonitor/lib/arm/libapa_jni.so");
symlink("/system/lib64/libgkdp_sv_engine.so", "/system/app/SCService/lib/arm64/libgkdp_sv_engine.so");
symlink("/system/lib64/libscservice_jni.so", "/system/app/SCService/lib/arm64/libscservice_jni.so");
symlink("/system/lib/libDioDict3EngineNativeFrame.so", "/system/app/SecDict2Zero/lib/arm/libDioDict3EngineNativeFrame.so");
symlink("/system/lib/libdioiculemma.so", "/system/app/SecDict2Zero/lib/arm/libdioiculemma.so");
symlink("/system/lib/libjma.so", "/system/app/SecDict2Zero/lib/arm/libjma.so");
symlink("/system/lib/libnltk.so", "/system/app/SecDict2Zero/lib/arm/libnltk.so");
symlink("/system/lib/libstlport_shared.so", "/system/app/SecDict2Zero/lib/arm/libstlport_shared.so");
symlink("/system/lib64/libprintspooler_jni.so", "/system/app/SPrintSpooler/lib/arm64/libprintspooler_jni.so");
symlink("/system/lib/libTui.so", "/system/app/TuiService/lib/arm/libTui.so");
symlink("/system/lib64/libdefcontainer_jni.so", "/system/priv-app/DefaultContainerService/lib/arm64/libdefcontainer_jni.so");
symlink("/system/lib64/libPlatformStrings.so", "/system/priv-app/HealthService/lib/arm64/libPlatformStrings.so");
symlink("/system/lib64/libSensorNativeProtocol.so", "/system/priv-app/HealthService/lib/arm64/libSensorNativeProtocol.so");
symlink("/system/lib/libsecipx.so", "/system/priv-app/OutOfFocusViewer_WQHD_K/lib/arm/libsecipx.so");
symlink("/system/lib/libSisoJpegCodec.so", "/system/priv-app/OutOfFocusViewer_WQHD_K/lib/arm/libSisoJpegCodec.so");
symlink("/system/lib/libSRIB_FocusShot.so", "/system/priv-app/OutOfFocusViewer_WQHD_K/lib/arm/libSRIB_FocusShot.so");
symlink("/system/lib64/libPedometer.so", "/system/priv-app/SHealth4/lib/arm64/libPedometer.so");
symlink("/system/lib64/libPlatformStrings.so", "/system/priv-app/SHealth4/lib/arm64/libPlatformStrings.so");
symlink("/system/lib64/libsaiv.so", "/system/priv-app/SHealth4/lib/arm64/libsaiv.so");
symlink("/system/lib64/libSensorNativeProtocol.so", "/system/priv-app/SHealth4/lib/arm64/libSensorNativeProtocol.so");
symlink("/system/lib64/lib_stressanalyzer_v03_jni.so", "/system/priv-app/SHealth4/lib/arm64/lib_stressanalyzer_v03_jni.so");
symlink("/system/lib/libCreateSceneMap.so", "/system/priv-app/VirtualTourViewer_WQHD_lightTheme/lib/arm/libCreateSceneMap.so");
symlink("/system/lib/libqjpeg_secvision.so", "/system/priv-app/VirtualTourViewer_WQHD_lightTheme/lib/arm/libqjpeg_secvision.so");
Attention: framework deodexed only for 64-bit (32-bit version not deodexed and not was copied to result)
List of apks that have 32-bit and 64-bit versions (deodexed only for 64-bit):
/system/app/WebViewGoogle.apk
List of deodexed apks that have only 32-bit version (don't have 64-bit):
/system/app/AdvSoundDetector2015.apk
/system/app/AllshareFileShare.apk
/system/app/AllshareFileShareServer.apk
/system/app/AllshareMediaShare.apk
/system/app/Bluetooth.apk
/system/app/Panorama360Viewer_Zero.apk
/system/app/RootPA.apk
/system/app/SamsungChineseIMEv9.apk
/system/app/SapaMonitor.apk
/system/app/SBrowser_3.0.38.apk
/system/app/SCONE_Android_ProxyService_Lib.apk
/system/app/SecDict2Zero.apk
/system/app/TuiService.apk
/system/priv-app/ChineseLanguagePack.apk
/system/priv-app/EnglishLanguagePack.apk
/system/priv-app/KoreanLanguagePack.apk
/system/priv-app/OutOfFocusViewer_WQHD_K.apk
/system/priv-app/S-Voice_Android_new.apk
/system/priv-app/SVoice_PLM_Service.apk
/system/priv-app/TouchWizHome_ZERO.apk
/system/priv-app/VirtualTourViewer_WQHD_lightTheme.apk
/system/priv-app/VoiceWakeUp.apk
List of originally deodexed (within stock firmware) files, are left as they were originally:
/system/framework/cneapiclient.jar
/system/framework/com.qti.dpmframework.jar
/system/framework/com.quicinc.cne.jar
/system/framework/com.samsung.device.jar
/system/framework/dpmapi.jar
/system/app/FactoryCamera_FB.apk
/system/app/minimode-res.apk
/system/app/MirrorLink.apk
/system/app/SecFactoryPhoneTest.apk
/system/app/secvisualeffect-res.apk
/system/priv-app/AutomationTest_FB.apk
/system/priv-app/AutoPreconfig.apk
/system/priv-app/DeviceKeystring.apk
/system/priv-app/DeviceTest.apk
/system/priv-app/HwModuleTest.apk
/system/priv-app/KLMSAgent.apk
/system/priv-app/serviceModeApp_FB.apk
/system/priv-app/ServiceModeApp_RIL.apk
/system/priv-app/SMCore.apk
/system/framework/core-libart.jar
This tool uses oat2dex.jar (v0.83) (thanks @_riddle).
If _riddle issues new version of oat2dex.jar - you must change it in zip archive and rename as oat2dex.jar.
64-bit Deodexer for Android Runtime (Version 4.1 от 09/03/2016) © Valery Studenikin, 2016
Path to stock /system directory: F:\TEMP\1\system\system
Android 6.0: PLK, PLK-L01C432B320, changelist , Sun Jan 24 06:36:33 CST 2016
Processor architecture: \oat\arm64\
Files deodexed succesfully: 164, with errors: 0. CPU time: 00:02:37 (157,321 sec.)
Attention: framework deodexed only for 64-bit (32-bit version not deodexed and not was copied to result)
List of apks that have 32-bit and 64-bit versions (deodexed only for 64-bit):
/system/app/HwDeskClock.apk
/system/app/HwFileManager.apk
/system/app/HwFMRadio.apk
/system/priv-app/Calendar.apk
/system/priv-app/Contacts.apk
/system/priv-app/Gallery2.apk
/system/priv-app/HwNotePad.apk
/system/priv-app/HwSystemManager.apk
List of deodexed apks that have only 32-bit version (don't have 64-bit):
/system/app/Bluetooth.apk
/system/app/Galaxy4.apk
/system/app/HoloSpiralWallpaper.apk
/system/app/HwMultiScreenShot.apk
/system/app/HwOUC.apk
/system/app/HwSoundRecorder.apk
/system/app/HwVAssistant.apk
/system/app/NoiseField.apk
/system/app/PhaseBeam.apk
/system/priv-app/HwCamera.apk
/system/priv-app/HwVPlayer.apk
List of originally deodexed (within stock firmware) files, are left as they were originally:
/system/app/Books.apk
/system/app/Chrome.apk
/system/app/Drive.apk
/system/app/Gmail2.apk
/system/app/GoogleCalendarSyncAdapter.apk
/system/app/GoogleContactsSyncAdapter.apk
/system/app/GoogleTTS.apk
/system/app/Hangouts.apk
/system/app/Maps.apk
/system/app/Music2.apk
/system/app/Newsstand.apk
/system/app/Photos.apk
/system/app/PlayGames.apk
/system/app/PlusOne.apk
/system/app/talkback.apk
/system/app/Videos.apk
/system/app/WebViewGoogle.apk
/system/app/YouTube.apk
/system/priv-app/ConfigUpdater.apk
/system/priv-app/Exchange2.apk
/system/priv-app/GmsCore.apk
/system/priv-app/GoogleBackupTransport.apk
/system/priv-app/GoogleFeedback.apk
/system/priv-app/GoogleLoginService.apk
/system/priv-app/GoogleOneTimeInitializer.apk
/system/priv-app/GooglePackageInstaller.apk
/system/priv-app/GooglePartnerSetup.apk
/system/priv-app/GoogleServicesFramework.apk
/system/priv-app/Phonesky.apk
/system/priv-app/SetupWizard.apk
/system/priv-app/Velvet.apk