Question

I can use apktool to decode apk then build again for my normal android project.

But when I tried same thing with the project that depends on the library project (appcompat), it failed with following errors.

Do I need to build with library project and if so, how can I specify that?

$ apktool build apkdecode repack.apk
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
/<currentdir>/apkdecode/res/values/styles.xml:59: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:99: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:146: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:176: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:192: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base.DropDownItem'.
/<currentdir>/apkdecode/res/values/styles.xml:218: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:225: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Light.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:242: error: Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:275: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values-v14/styles.xml:50: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/<currentdir>/apkdecode/res/values/styles.xml:467: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Base'.
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 11, -F, /var/folders/6l/q11hqqj57rs0lgxcx1njdlxc0000gn/T/APKTOOL2534308390228031373.tmp, -0, arsc, -I, /<toolpath>/apktool/framework/1.apk, -S, /<currentdir>/apkdecode/res, -M, /<currentdir>/apkdecode/AndroidManifest.xml]
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358)
    at brut.androlib.Androlib.buildResources(Androlib.java:283)
    at brut.androlib.Androlib.build(Androlib.java:206)
    at brut.androlib.Androlib.build(Androlib.java:176)
    at brut.apktool.Main.cmdBuild(Main.java:228)
    at brut.apktool.Main.main(Main.java:79)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 11, -F, /var/folders/6l/q11hqqj57rs0lgxcx1njdlxc0000gn/T/APKTOOL2534308390228031373.tmp, -0, arsc, -I, /<toolpath>/apktool/framework/1.apk, -S, /<currentdir>/apkdecode/res, -M, /<currentdir>/apkdecode/AndroidManifest.xml]
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)
    ... 5 more
Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 11, -F, /var/folders/6l/q11hqqj57rs0lgxcx1njdlxc0000gn/T/APKTOOL2534308390228031373.tmp, -0, arsc, -I, /<toolpath>/apktool/framework/1.apk, -S, /<currentdir>/apkdecode/res, -M, /<currentdir>/apkdecode/AndroidManifest.xml]
    at brut.util.OS.exec(OS.java:89)
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355)
    ... 6 more
Was it helpful?

Solution

It's a problem of apktool v1 (1.5.3). There are several ways to solve it.

1. Edit styles.xml. Add the empty 'parent' attribute to the tags on the error lines. For example:

Before

59: <style name="Widget.AppCompat.Base.ActionBar">

After

59: <style name="Widget.AppCompat.Base.ActionBar" parent="">

Then build the project. In this way you need to edit xml every time you decode apk.

2. Edit apktool sources and rebuild it. You have to edit method 'serializeToResValuesXml' in the file 'android-apktool/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResStyleValue.java':

Before

if (!mParent.isNull()) {
    serializer.attribute(null, "parent", mParent.encodeAsResXmlAttr());
}

After

if (!mParent.isNull()) {
    serializer.attribute(null, "parent", mParent.encodeAsResXmlAttr());
} else if (res.getResSpec().getName().indexOf('.') != -1) {
    serializer.attribute(null, "parent", "");
}

3. Just use apktool v2 :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top