Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 1f5f41d

Browse files
committed
Merge pull request #106 from google/all-native-depedendencies
ClassyShark shows all native dependencies in the APK page, fixes bug fix bug #103
2 parents 581660a + 2bc18cd commit 1f5f41d

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

ClassySharkWS/src/com/google/classyshark/silverghost/translator/apk/ApkTranslator.java

+33-10
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,11 @@
1616

1717
package com.google.classyshark.silverghost.translator.apk;
1818

19+
import com.google.classyshark.silverghost.TokensMapper;
1920
import com.google.classyshark.silverghost.contentreader.dex.DexlibLoader;
2021
import com.google.classyshark.silverghost.io.SherlockHash;
21-
import com.google.classyshark.silverghost.TokensMapper;
2222
import com.google.classyshark.silverghost.translator.Translator;
23-
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
24-
import org.jf.dexlib2.iface.DexFile;
25-
import org.ow2.asmdex.ApplicationReader;
26-
import org.ow2.asmdex.ApplicationVisitor;
27-
import org.ow2.asmdex.ClassVisitor;
28-
import org.ow2.asmdex.MethodVisitor;
29-
import org.ow2.asmdex.Opcodes;
30-
23+
import com.google.classyshark.silverghost.translator.elf.ElfTranslator;
3124
import java.io.File;
3225
import java.io.FileInputStream;
3326
import java.io.InputStream;
@@ -40,6 +33,14 @@
4033
import java.util.TreeSet;
4134
import java.util.zip.ZipEntry;
4235
import java.util.zip.ZipInputStream;
36+
import nl.lxtreme.binutils.elf.Elf;
37+
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
38+
import org.jf.dexlib2.iface.DexFile;
39+
import org.ow2.asmdex.ApplicationReader;
40+
import org.ow2.asmdex.ApplicationVisitor;
41+
import org.ow2.asmdex.ClassVisitor;
42+
import org.ow2.asmdex.MethodVisitor;
43+
import org.ow2.asmdex.Opcodes;
4344

4445
/**
4546
* Translator for the .apk entry
@@ -91,6 +92,18 @@ public void apply() {
9192
element = new ELEMENT(nativeLib, TAG.DOCUMENT);
9293
elements.add(element);
9394
}
95+
96+
element = new ELEMENT("\nNative Dependencies\n",
97+
TAG.DOCUMENT);
98+
99+
elements.add(element);
100+
101+
List<String> sortedNativeDependencies = new LinkedList<>(apkAnalysis.nativeDependencies);
102+
Collections.sort(sortedNativeDependencies);
103+
for (String nativeLib : sortedNativeDependencies) {
104+
element = new ELEMENT(nativeLib + "\n", TAG.DOCUMENT);
105+
elements.add(element);
106+
}
94107
}
95108

96109
@Override
@@ -132,7 +145,7 @@ public String toString() {
132145
}
133146
}
134147

135-
public static DexData fillAnalysis(int dexIndex, File file) {
148+
public static DexData fillAnalysis(int dexIndex, File file) {
136149
DexData dexData = new DexData(dexIndex);
137150

138151
try {
@@ -156,6 +169,7 @@ public String toString() {
156169
private static class ApkAnalysis {
157170
public List<String> nativeLibs = new ArrayList<>();
158171
public TreeSet<DexData> dexes = new TreeSet<>();
172+
public TreeSet<String> nativeDependencies = new TreeSet<>();
159173

160174
public String toString() {
161175
return dexes + "\n\n"
@@ -192,6 +206,15 @@ private static ApkAnalysis doInspect(File binaryArchiveFile) {
192206
dexIndex++;
193207
} else {
194208
if (zipEntry.getName().startsWith("lib")) {
209+
210+
File nativeLib = ElfTranslator.extractElf(zipEntry.getName(), binaryArchiveFile);
211+
212+
Elf dependenciesReader = new Elf(nativeLib);
213+
List<String> libraryDependencies = dependenciesReader.getSharedDependencies();
214+
for (String dependency : libraryDependencies) {
215+
result.nativeDependencies.add(dependency);
216+
}
217+
195218
result.nativeLibs.add(zipEntry.getName() + "\n");
196219
}
197220
}

ClassySharkWS/src/com/google/classyshark/silverghost/translator/elf/ElfTranslator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public List<String> getDependencies() {
102102

103103
// TODO currently support only dexes, here is how to do for jar
104104
// TODO https://github.com/adamheinrich/native-utils/blob/master/NativeUtils.java
105-
private static File extractElf(String elfName,
105+
public static File extractElf(String elfName,
106106
File apkFile) {
107107
File file = new File("classes.dex");
108108
ZipInputStream zipFile;

0 commit comments

Comments
 (0)