Initial
This commit is contained in:
71
Tests/AndroidXMLTests/Test.swift
Normal file
71
Tests/AndroidXMLTests/Test.swift
Normal file
@@ -0,0 +1,71 @@
|
||||
import Testing
|
||||
import Foundation
|
||||
import AndroidXML
|
||||
|
||||
struct Test {
|
||||
@Test func foo() async throws {
|
||||
// code for debugging. Run with Cmd+U
|
||||
// printXml(.t1, "AndroidManifest.xml")
|
||||
// printRes(.t1, 0x7F100000)
|
||||
// try allXmlForFolder(.t1)
|
||||
// try attrResolveEverything(.t1)
|
||||
print("done.")
|
||||
}
|
||||
|
||||
private enum Pth: String {
|
||||
case t1 = "/path/to/unpacked/apk/dir/"
|
||||
}
|
||||
|
||||
private func printXml(_ base: Pth, _ path: String) {
|
||||
print(try! AndroidXML(path: base.rawValue + "/" + path).parseXml().xmlString())
|
||||
}
|
||||
|
||||
private func printRes(_ base: Pth, _ id: UInt32) {
|
||||
let xml = try! AndroidXML(path: base.rawValue + "/resources.arsc").parseTable()
|
||||
let res = try! xml.getResource(TblTableRef(id))!
|
||||
let pkgPool = res.package.stringPool(for: .Keys)!
|
||||
for x in res.entries {
|
||||
let val = x.entry.value!
|
||||
print(pkgPool.getString(x.entry.key), val.resolve(xml.stringPool), x.config.screenType.density)
|
||||
}
|
||||
}
|
||||
|
||||
private func allXmlForFolder(_ pth: Pth) throws {
|
||||
let xx = FileManager.default.enumerator(atPath: pth.rawValue + "/res/")!
|
||||
for x in xx.allObjects as! [String] {
|
||||
if !x.hasSuffix(".xml") {
|
||||
continue
|
||||
}
|
||||
|
||||
// only process files which are binary-xml
|
||||
if let xml = try? AndroidXML(path: pth.rawValue + "/res/" + x) {
|
||||
print(x)
|
||||
let _ = try xml.parseXml().xmlString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func attrResolveEverything(_ pth: Pth) throws {
|
||||
let xml = try AndroidXML(path: pth.rawValue + "/resources.arsc").parseTable()
|
||||
for pkg in try xml.getPackages() {
|
||||
let pool = pkg.stringPool(for: .Keys)!
|
||||
try pkg.iterTypes { spec, types in
|
||||
//print("----- \(spec.id) ------")
|
||||
for type in types {
|
||||
try type.iterValues { idx, entry in
|
||||
if entry.isComplex {
|
||||
//print("::.::.complex", pool.getString(entry.key), entry.valueMap!.parent.asHex)
|
||||
for x in entry.valueMap!.entries {
|
||||
let _ = x.name.asHex
|
||||
let _ = x.value.resolve(xml.stringPool)
|
||||
}
|
||||
} else {
|
||||
let _ = pool.getString(entry.key)
|
||||
let _ = entry.value!.resolve(xml.stringPool)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user