【问题标题】:"No resource identifier found" In menu resource files after refactoring android studio project“未找到资源标识符”重构 android studio 项目后的菜单资源文件中
【发布时间】:2017-07-02 16:21:28
【问题描述】:

我最近对我的 android studio 项目进行了一些重大重构,因为它越来越接近实际发布。无论如何,我有大约 6 个菜单资源文件,它们都有标题

<?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">

用我的项目构建很好。回来并添加 3 个新的菜单资源文件(这是一个大项目)后,我收到此错误:

Error:(10) No resource identifier found for attribute 'shows action' in package 'com.codemine.pcpartpicker

这只发生在新添加的菜单资源文件中,如果我删除它并且只有旧的,Gradle 仍然会构建,更奇怪的是错误报告没有包在

com.codemine.pcpartpicker

当我的项目包是

com.codemine.unofficial.pcpartpicker

这是我的清单,因为我怀疑问题出在那儿......

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.codemine.unofficial.pcpartpicker">

    <uses-permission android:name="android.permission.INTERNET" />

        <application
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:supportsRtl="true"
                android:theme="@style/AppTheme">

            <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".CPUActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".CPUCoolerActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".MotherboardActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".MemoryActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".GpuActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".StorageActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".CaseActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".PowerActivity"
            android:parentActivityName=".MainActivity" />
        <activity
            android:name=".MonitorActivity"
            android:parentActivityName=".MainActivity" />
    </application>

</manifest>

编辑:这是我的 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId 'com.codemine.unofficial.pcpartpicker'
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //for cardView
    //for jsoup, grabs dependency from maven central
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'org.jsoup:jsoup:1.7.2'
    compile 'com.android.support:support-core-utils:25.2.0'
    compile 'com.android.support:support-v4:25.2.0'
    compile 'com.android.support:design:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:recyclerview-v7:25.2.0'
    compile 'com.android.support:cardview-v7:25.2.0'
    testCompile 'junit:junit:4.12'
}

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    以前的类似问题已在 Stack Exchange 上得到回答,建议 minSDKVersion 必须超过 11 才能进行 showaction,但我看到您的设置为 15。请参阅:

    error:no resource identifier found for attribute"showAsAction" in package android

    话虽如此,鉴于您已经进行了重大重构,也许它以某种方式指向具有较低 minSDKVersion 的旧 build.gradle。在使用 IDE 的类似情况下,我发现重建可以提供帮助。也许值得一试。祝你好运。

    【讨论】:

    • 嗯,我还没有提交更改,因为它们已损坏,但是您认为如果我尝试将项目拉到另一台计算机上,这可能是问题所在的一个很好的指标吗?
    • 可能表明。我不确定项目的生命周期或您最近的重构,但我想知道是否出于某种原因 com.codemine.pcpartpicker 和 com.codemine.unofficial.pcpartpicker 的包名称都被使用了,这让 ide 感到困惑。我想知道“非官方”是否是重新开发版本,另一个是生产版本或类似的东西。抱歉,如果这没有帮助,因为我不确定项目背景。
    • 我假设您只粘贴了清单文件的一部分,我假设您必须拥有带有正确包字符串等的清单 XML 元素。请参阅developer.android.com/guide/topics/manifest/…
    【解决方案2】:

    这是一个非常令人沮丧的错误,主要是因为我找错了地方来修复它。这似乎发生在更改项目添加新资源文件之后(我只遇到了菜单问题,但我推测它可能发生在任何资源文件中)。 IDE/Gradle 似乎有一些错误,它似乎想要引用 previous 包 中的文件版本,即使这个包不再存在。如您所见,我的 java、manifest、menu 等是正确的,问题出在其他地方。

    解决方案

    我将我的资源文件复制到 n++ 中并将它们从项目中删除,然后执行 build>clean 项目,在注释掉一些行后应该成功完成。然后我删除了菜单资源文件并将它们添加回来用不同的名称,这很重要。此时不要将旧代码粘贴回其中。从xmlns:app="http://schemas.android.com/apk/res-auto" 添加一个没有任何属性的项目,确保项目成功构建,然后从那里添加一些内容并让 android studio 为您编辑命名空间。自己更新命名空间不会成功,相信我,我知道。

    这是一个非常小众但令人沮丧的问题,希望没有其他人遇到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多