奇怪的<user-permission>错误

时间:2016-01-15 12:37:15

标签: android android-studio android-manifest

出于某种原因,我在为user-permissionCALL_PHONE添加READ_PHONE_STATE时遇到了一个令人讨厌的错误。

Error:(16) Tag <uses-permission> attribute name has invalid character ' '.

在此行中出错:

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

删除PHONE和&#34;之间的空格时它仍然给我错误。

我尝试过清洁,重建和重新启动。 丢失的线条是红色的..

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.daxrahusen.navigationdrawervideotutorial"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="23" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CALL_PHONE " />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

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

    <application
        android:name="com.example.daxrahusen.navigationdrawervideotutorial.ParseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.parse.APPLICATION_ID"
            android:value="...Parse..." />
        <meta-data
            android:name="com.parse.CLIENT_KEY"
            android:value="...Parse..." />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="...Google..." />

        <activity
            android:name="com.example.daxrahusen.navigationdrawervideotutorial.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.daxrahusen.navigationdrawervideotutorial.login"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        </activity>

        <!-- Include the AdActivity and InAppPurchaseActivity configChanges and themes. -->
        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />
        <activity
            android:name="com.google.android.gms.ads.purchase.InAppPurchaseActivity"
            android:theme="@style/Theme.IAPTheme" />

        <meta-data
            android:name="com.google.android.gms.wallet.api.enabled"
            android:value="true" />

        <receiver
            android:name="com.google.android.gms.wallet.EnableWalletOptimizationReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.android.gms.wallet.ENABLE_WALLET_OPTIMIZATION" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

3 个答案:

答案 0 :(得分:3)

进入APK的AndroidManifest.xml文件不是您撰写的AndroidManifest.xml。相反,通过所谓的清单合并过程,生成包含以下材料的AndroidManifest.xml文件:

  • 您在不同的资源集中撰写的所有清单(例如src/main/src/debug/src/release

  • 您从工件存储库中提取的库模块或AAR提供的所有清单

  • build.gradle中的设置,例如minSdkVersion

此生成的清单保存在build/intermediates/manifests/...中,其中...取决于您正在进行的构建类型(例如,debugrelease)。< / p>

有时,当清单中存在错误时,问题在清单合并完成之后才会被捕获。然后,Android Studio会打开一个选项卡,显示生成的清单,指出问题所在。编辑此清单毫无意义,因为它会在每次构建时重新生成。相反,您需要转到包含有缺陷的XML的任何清单并修复该清单。

&#34;它不断设置空格&#34;建议您编辑生成的清单,而不是原始清单。

答案 1 :(得分:2)

你应该删除它末尾的空格字符

更改

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

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

答案 2 :(得分:1)

你应该删除清单中的CALL_PHONE之后的空格

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

使它像:

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

确保您在应用清单中执行此操作,而不是在生成的清单中,生成的清单不可编辑。