由<provider>引起的INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

时间:2015-12-11 07:55:40

标签: android android-manifest

所以,我明白了这个问题。前一天一切都很好,但是当我试图从Android Studio运行我的应用程序时,它突然说INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

我检查了LogCat并找到了这个条目

  

12-11 14:34:44.904 28710-28747 /? W / PackageParser:/data/local/tmp/com.myapp(在二进制XML文件行#148):<provider>不包含权限属性

     

12-11 14:34:45.084 2619-2756 /? W / PackageParser:/data/app/vmdl-1571002842.tmp(在二进制XML文件行#148):<provider>不包含权限属性

所以,我去了Android Manifest,我发现提供者的权限属性仍然存在,没有遗漏。这是我的AndroidManifest.xml

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

    <permission
        android:name="com.myapp.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

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

    <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="com.myapp.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>

    <application
        android:name=".SisiApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".SplashActivity"
            android:label="@string/app_name"
            android:noHistory="true"
            android:theme="@style/AppThemeNoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".LoginActivity"
            android:label="@string/title_activity_login"
            android:noHistory="true"
            android:theme="@style/AppThemeNoActionBar"
            android:windowSoftInputMode="adjustResize|stateVisible"/>
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/title_activity_main"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".SurveyActivity"
            android:label="@string/title_activity_survey"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden"/>
        <activity
            android:name=".StoreActivity"
            android:label="@string/title_activity_add_store"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden"/>
        <activity
            android:name=".OrderActivity"
            android:label="@string/title_activity_order"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden"/>
        <activity
            android:name=".StoreDetailActivity"
            android:label="@string/title_activity_store_detail"
            android:parentActivityName=".MainActivity"
            android:screenOrientation="portrait">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity"/>
        </activity>
        <activity
            android:name=".OrderDetailActivity"
            android:label="@string/title_activity_order_detail"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".SurveyDetailActivity"
            android:label="@string/title_activity_survey_detail"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".MapActivity"
            android:label="@string/title_activity_map"
            android:screenOrientation="portrait"/>

        <provider
            android:name=".data.providers.CRMContentProvider"
            android:authorities="com.myapp.providers"
            android:exported="false"
            android:syncable="true"/>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version"/>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="xxx"/>

        <service
            android:name=".services.AuthenticatorService"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.accounts.AccountAuthenticator"/>
            </intent-filter>

            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator"/>
        </service>
        <service
            android:name=".services.SyncService"
            android:enabled="true"
            android:exported="true"
            android:process=":sync">
            <intent-filter>
                <action android:name="android.content.SyncAdapter"/>
            </intent-filter>
            <meta-data
                android:name="android.content.SyncAdapter"
                android:resource="@xml/syncadapter"/>
        </service>
    </application>
</manifest>

我甚至确保在代码中使用了相同的权限

public class CRMContentProvider extends ContentProvider {

    public static final String AUTHORITY = "com.myapp.providers";
    ...
}

我做错了什么?请帮忙!

更新

所以,问题出在这里

<provider
    android:name="net.grandcentrix.tray.provider.TrayProvider"
    android:authorities="@string/tray__authority"
    android:exported="false"
    android:multiprocess="false" />

Tray library添加。但我仍然不知道为什么它会突然造成错误。

2 个答案:

答案 0 :(得分:0)

也许您应该为您的权限引用Android字符串资源。

试试这个:

{{1}}

答案 1 :(得分:0)

我终于可以解决问题了,虽然我还是不知道为什么它首先发生了。这就是我的所作所为。

我放了一个字符串资源,

<string name="tray__authority" translatable="false">com.myapp.tray</string>

然后,我替换清单中的<provider>,如此,

<provider
    android:name="net.grandcentrix.tray.provider.TrayProvider"
    android:authorities="@string/tray__authority"
    android:exported="false"
    android:multiprocess="false"
    tools:replace="android:authorities"/>

这样,它将取代Tray生成的提供程序。这看起来很奇怪但是当我没有替换<provider>时它没有用。