Skip to content

Commit 48e1d23

Browse files
committed
feat(aab): add parser for native.pb, assets.pb, dependencies.pb
1 parent f43bcc6 commit 48e1d23

4 files changed

Lines changed: 85 additions & 0 deletions

File tree

jadx-plugins/jadx-aab-input/src/main/java/jadx/plugins/input/aab/AabInputPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import jadx.api.plugins.JadxPluginContext;
55
import jadx.api.plugins.JadxPluginInfo;
66
import jadx.api.plugins.resources.IResourcesLoader;
7+
import jadx.plugins.input.aab.factories.ProtoAppDependenciesResContainerFactory;
8+
import jadx.plugins.input.aab.factories.ProtoAssetsConfigResContainerFactory;
79
import jadx.plugins.input.aab.factories.ProtoBundleConfigResContainerFactory;
10+
import jadx.plugins.input.aab.factories.ProtoNativeConfigResContainerFactory;
811
import jadx.plugins.input.aab.factories.ProtoTableResContainerFactory;
912
import jadx.plugins.input.aab.factories.ProtoXmlResContainerFactory;
1013

@@ -28,5 +31,8 @@ public synchronized void init(JadxPluginContext context) {
2831
resourcesLoader.addResContainerFactory(new ProtoTableResContainerFactory(tableParserProvider));
2932
resourcesLoader.addResContainerFactory(new ProtoXmlResContainerFactory());
3033
resourcesLoader.addResContainerFactory(new ProtoBundleConfigResContainerFactory());
34+
resourcesLoader.addResContainerFactory(new ProtoAssetsConfigResContainerFactory());
35+
resourcesLoader.addResContainerFactory(new ProtoNativeConfigResContainerFactory());
36+
resourcesLoader.addResContainerFactory(new ProtoAppDependenciesResContainerFactory());
3137
}
3238
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package jadx.plugins.input.aab.factories;
2+
3+
import com.android.bundle.AppDependenciesOuterClass;
4+
import com.android.bundle.Files;
5+
import jadx.api.ICodeInfo;
6+
import jadx.api.ResourceFile;
7+
import jadx.api.impl.SimpleCodeInfo;
8+
import jadx.api.plugins.resources.IResContainerFactory;
9+
import jadx.core.xmlgen.ResContainer;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
import java.io.IOException;
13+
import java.io.InputStream;
14+
15+
public class ProtoAppDependenciesResContainerFactory implements IResContainerFactory {
16+
17+
@Override
18+
public @Nullable ResContainer create(ResourceFile resFile, InputStream inputStream) throws IOException {
19+
if (!resFile.getOriginalName().endsWith("BUNDLE-METADATA/com.android.tools.build.libraries/dependencies.pb")) {
20+
return null;
21+
}
22+
23+
AppDependenciesOuterClass.AppDependencies appDependencies = AppDependenciesOuterClass.AppDependencies.parseFrom(inputStream);
24+
ICodeInfo content = new SimpleCodeInfo(appDependencies.toString());
25+
return ResContainer.textResource(resFile.getDeobfName(), content);
26+
}
27+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package jadx.plugins.input.aab.factories;
2+
3+
import com.android.bundle.Files;
4+
import jadx.api.ICodeInfo;
5+
import jadx.api.ResourceFile;
6+
import jadx.api.impl.SimpleCodeInfo;
7+
import jadx.api.plugins.resources.IResContainerFactory;
8+
import jadx.core.xmlgen.ResContainer;
9+
import org.jetbrains.annotations.Nullable;
10+
11+
import java.io.IOException;
12+
import java.io.InputStream;
13+
14+
public class ProtoAssetsConfigResContainerFactory implements IResContainerFactory {
15+
16+
@Override
17+
public @Nullable ResContainer create(ResourceFile resFile, InputStream inputStream) throws IOException {
18+
if (!resFile.getOriginalName().endsWith("assets.pb")) {
19+
return null;
20+
}
21+
22+
Files.Assets assetsConfig = Files.Assets.parseFrom(inputStream);
23+
ICodeInfo content = new SimpleCodeInfo(assetsConfig.toString());
24+
return ResContainer.textResource(resFile.getDeobfName(), content);
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package jadx.plugins.input.aab.factories;
2+
3+
import com.android.bundle.Files;
4+
import jadx.api.ICodeInfo;
5+
import jadx.api.ResourceFile;
6+
import jadx.api.impl.SimpleCodeInfo;
7+
import jadx.api.plugins.resources.IResContainerFactory;
8+
import jadx.core.xmlgen.ResContainer;
9+
import org.jetbrains.annotations.Nullable;
10+
11+
import java.io.IOException;
12+
import java.io.InputStream;
13+
14+
public class ProtoNativeConfigResContainerFactory implements IResContainerFactory {
15+
16+
@Override
17+
public @Nullable ResContainer create(ResourceFile resFile, InputStream inputStream) throws IOException {
18+
if (!resFile.getOriginalName().endsWith("native.pb")) {
19+
return null;
20+
}
21+
22+
Files.NativeLibraries nativeConfig = Files.NativeLibraries.parseFrom(inputStream);
23+
ICodeInfo content = new SimpleCodeInfo(nativeConfig.toString());
24+
return ResContainer.textResource(resFile.getDeobfName(), content);
25+
}
26+
}

0 commit comments

Comments
 (0)