Apktool错误检索项目的父项:找不到与给定名称“@android:style / Animation.OptionsPanel”匹配的资源

时间:2017-01-25 07:58:20

标签: android android-security

我试图使用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>

3 个答案:

答案 0 :(得分:2)

删除〜/ Library / apktool /文件夹(Mac OS),重新运行apktool,一切都会好的。

答案 1 :(得分: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一旦安装就无法控制框架,但您可以自己管理这些文件。

答案 2 :(得分:0)

你可以删除这一行 它是来自来源的建筑商添加的行

Android Studio专栏中的

"<style name="Base...."绘图与黄色对齐 - 它是ovverides