【问题标题】:Apktool Error retrieving parent for item: No resource found that matches the given name '@android:style/Animation.OptionsPanel'Apktool 检索项目的父项时出错:未找到与给定名称“@android:style/Animation.OptionsPanel”匹配的资源
【发布时间】:2017-01-25 07:58:20
【问题描述】:

我正在尝试使用 apktool (apktool-2.1.1) 重建 apk。

遇到错误

i) 未找到与给定名称“@android:style/Animation.OptionsPanel”匹配的资源

ii)未找到与给定名称“@android:style/Animation.LockScreen”匹配的资源

错误信息:

I: Using Apktool 2.1.1
I: Copying /home/workspace/debug/app-demo-release classes.dex file...
I: Building resources...
W: /home/workspace/debug/app-demo-release/res/values-v24/styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Animation.OptionsPanel'.
W: 
W: /home/workspace/debug/app-demo-release/res/values-v24/styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Animation.LockScreen'.
W: 
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_1478810839657812213.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 22, --version-code, 6, --version-name, 1.0.5-debug, -F, /tmp/APKTOOL7363633357993529625.tmp, -0, arsc, -0, woff2, -0, assets/io/michaelrocks/libphonenumber/android/data/PhoneNumberAlternateFormatsProto_66, -0, arsc, -I, /home/workspace/debug/apktool/framework/1.apk, -S, /home/workspace/debug/app-demo-release/res, -M, /home/workspace/debug/app-demo-release/AndroidManifest.xml]
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:437)
    at brut.androlib.Androlib.buildResources(Androlib.java:371)
    at brut.androlib.Androlib.build(Androlib.java:281)
    at brut.androlib.Androlib.build(Androlib.java:254)
    at brut.apktool.Main.cmdBuild(Main.java:224)
    at brut.apktool.Main.main(Main.java:84)

styles.xml

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="TextAppearance.AppCompat.Notification.Info.Media" parent="@style/TextAppearance.AppCompat.Notification.Info" />
        <style name="TextAppearance.AppCompat.Notification.Media" parent="@style/TextAppearance.AppCompat.Notification" />
        <style name="TextAppearance.AppCompat.Notification.Time.Media" parent="@style/TextAppearance.AppCompat.Notification.Time" />
        <style name="TextAppearance.AppCompat.Notification.Title.Media" parent="@style/TextAppearance.AppCompat.Notification.Title" />
        <style name="Base.TextAppearance.AppCompat.Widget.Button.Borderless.Colored" parent="@android:style/Animation.OptionsPanel" />
        <style name="Base.TextAppearance.AppCompat.Widget.Button.Colored" parent="@android:style/Animation.LockScreen" />
    </resources>

【问题讨论】:

    标签: android android-security


    【解决方案1】:

    删除~/Library/apktool/文件夹(Mac OS),重新运行apktool,一切正常。

    【讨论】:

    • 我使用 -p ./apktool/framework/ 并且曾经删除 /apktoo/l 文件夹...... java -jar ./apktool_2.3.3.jar d -p ./apktool /framework/ -f ./app-demo-release.apk -o ./app-demo-release/ java -jar ./apktool_2.3.3.jar b -p ./apktool/framework/ -f ./app-demo -release/ -o ./app-demo-release.apk
    • 爱你丹尼尔。你打开了我的第三只眼睛:-P
    【解决方案2】:

    根据 Daniel Wang 的回答,apktool 的框架副本可能已过时,删除它会在下次运行时使用更新的 SDK 版本重新创建它。 apktool documentation 列出了位置,从 2.2.1 版开始,它还为这些位置提供了一个新命令:

    apktool empty-framework-dir
    

    引用下面的relevant documentation


    Apktool 不知道那里存在什么版本的框架。它将假定它是最新的,因此在 Apktool 升级期间删除该文件

    管理框架文件

    根据所涉及的操作系统,框架存储在不同的位置。

    • unix - $HOME/.local/share/apktool
    • Windows - %UserProfile%\AppData\Local\apktool
    • mac-$HOME/Library/apktool

    如果这些目录不可用,则默认为java.io.tmpdir,通常为/tmp。这是一个易失目录,因此利用参数--frame-path 为框架文件选择一个替代文件夹是有意义的。

    由于这些位置有时位于隐藏目录中,因此管理这些框架成为一项挑战。一个简单的辅助函数(在 v2.2.1 中添加)允许您运行 apktool empty-framework-dir 以清空框架。

    注意 Apktool 无法控制安装后的框架,但您可以自行管理这些文件。

    【讨论】:

    • 我使用 -p ./apktool/framework/ 并且曾经删除 /apktoo/l 文件夹...... java -jar ./apktool_2.3.3.jar d -p ./apktool /framework/ -f ./app-demo-release.apk -o ./app-demo-release/ java -jar ./apktool_2.3.3.jar b -p ./apktool/framework/ -f ./app-demo -release/ -o ./app-demo-release.apk
    【解决方案3】:

    你可以删除这行 它是构建器从源中添加的行

    在 Android Studio 的行中,"&lt;style name="Base...." 用黄色绘制 - 它是 ovverides

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      相关资源
      最近更新 更多