How to fix INSTALL_PARSE_FAILED_MANIFEST_MALFORMED in my android application

时间:2021-08-15 07:25:39

Hi I am trying to experiment with gcm but unable to make it work. Don't know where I am messing with it, below is the error I am getting. I am trying to deploy my application directly on device and debug from there but when ever I try to deploy it gives this error

嗨,我想尝试gcm,但无法使其工作。不知道我在哪里弄乱它,下面是我得到的错误。我试图直接在设备上部署我的应用程序并从那里进行调试,但是当我尝试部署它时会出现此错误

Waiting for device.
Target device: HT24LW108632
Uploading file
    local path: D:\Data\Android\AndroidTest\out\production\AndroidTest\AndroidTest.apk
    remote path: /data/local/tmp/Android.Test
Installing Android.Test
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/Android.Test"
pkg: /data/local/tmp/Android.Test
Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="Android.Test"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="14"/>

    <permission
            android:name="Android.Test.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />
    <uses-permission android:name="Android.Test.permission.C2D_MESSAGE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />



    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <receiver
                android:name="com.google.android.gcm.GCMBroadcastReceiver"
                android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="Android.Test" />
            </intent-filter>
        </receiver>
        <service android:name=".GCMIntentService" />
    </application>
</manifest>

My Device is HTC OneX

我的设备是HTC OneX

  • Android Version: 4.03
  • Android版本:4.03

  • HTC Sense Version: 4.0
  • HTC Sense版本:4.0

  • Software number: 1.29.110.11
  • 软件号:1.29.110.11

  • HTC SDK API Level: 4.12
  • HTC SDK API等级:4.12

  • HTC Extension version: HTCExtension_403_1_GA_7
  • HTC扩展版:HTCExtension_403_1_GA_7

Please guide as I am new fish in Android Sea.

请指导我在Android Sea中的新鱼。

Edit-1: I have noticed that if I comment this below line then application does deploy and execute but obviously I cant go forward without below mentioned permission ... please help....

编辑-1:我注意到,如果我在下面评论这条线,那么应用程序会部署并执行,但显然我无法在没有下述许可的情况下前进...请帮助....

<permission android:name="Android.Test.permission.C2D_MESSAGE"  android:protectionLevel="signature" />

10 个解决方案

#1


54  

Change name package with Caps letters to little letters.

使用Caps字母更改名称包到小写字母。

#2


8  

Change your

android:name="MainActivity"

TO

android:name=".MainActivity"

OR add the fully qualified package name in lowercase before your class name

或者在类名前添加小写的完全限定包名称

android:name="thepackage.MainActivity"

Do change all the attributes named as android:name inside the activity tags as I suggested.

请按照我的建议更改活动标记内名为android:name的所有属性。

#3


4  

Instead of:

<permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

to:

<uses-permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

Try that.

#4


3  

<activity android:name="MainActivity"

should be formed like

应该形成像

<activity android:name="com.company.appname" 

to do this without errors go to package (right click) > android tools > rename app package

要做到这一点没有错误去包(右键单击)> android工具>重命名应用程序包

#5


1  

try to write activity name follow by "." Instead of

尝试写活动名称后跟“。”代替

<activity android:name="MainActivity"
                  android:label="@string/app_name">

use

<activity android:name=".MainActivity"
                  android:label="@string/app_name">

#6


1  

I met this same issue in android studio

我在android studio中遇到了同样的问题

what solve this is to let company domain to be all small letters,

解决这个问题的办法是让公司域名都是小写字母,

#7


0  

There's issue about this: http://code.google.com/p/android/issues/detail?id=37658 Capital letters can't be used in package names within permissions. You got (same as me) into difficult situation when you have deployed application with package name like this and you need to use GCM. I tried to use some kind of short form of permission:

存在以下问题:http://code.google.com/p/android/issues/detail?id = 37658大写字母不能用于权限内的包名称。当您使用这样的包名部署应用程序并且需要使用GCM时,您(与我相同)陷入困境。我尝试使用某种简短形式的许可:

<permission android:name=".permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name=".permission.C2D_MESSAGE" />

I also defined service in the same way. It had to be in application package. It worked on Android 4.3. Probably on 4.2 also. I know that on 4.0.3 it didn't.

我也以同样的方式定义了服务。它必须在应用程序包中。它适用于Android 4.3。也可能在4.2上。我知道4.0.3它没有。

#8


0  

make sure your package name is in small letters... worked for me

确保你的包裹名称是小写字母...为我工作

#9


0  

write the java package name and all folders name in lowercase, it will work fine...

用小写编写java包名和所有文件夹名,它会正常工作......

#10


0  

In my case I was mentioned the package name in small letters only. But for few of the activities I named it with partial name i.e android:name=".ContactUs" . After I solved it by prefixing full package name before all the activity name, service name and broadcast provider name in Manifest file.

在我的情况下,我只用小写字母提到了包名。但是对于一些活动,我用部分名称命名它,即android:name =“。ContactUs”。之后,我通过在清单文件中的所有活动名称,服务名称和广播提供程序名称之前添加完整包名称来解决它。

Working code

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

<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.DesignDemo">
    <activity
        android:name="vcan.doit.com.LoginActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="vcan.doit.com.MainActivity"
        android:theme="@style/Theme.DesignDemo" />
    <activity
        android:name="vcan.doit.com.CheeseDetailActivity"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>

    <service android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseMsgService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <service android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseInstanceIdService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

    <activity
        android:name="vcan.doit.com.AboutUs"
        android:label="@string/abt_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
    <activity
        android:name="vcan.doit.com.ContactUs"
        android:label="@string/contact_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
    <activity android:name="vcan.doit.com.WriteToUs"
        android:label="@string/write_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
</application>

#1


54  

Change name package with Caps letters to little letters.

使用Caps字母更改名称包到小写字母。

#2


8  

Change your

android:name="MainActivity"

TO

android:name=".MainActivity"

OR add the fully qualified package name in lowercase before your class name

或者在类名前添加小写的完全限定包名称

android:name="thepackage.MainActivity"

Do change all the attributes named as android:name inside the activity tags as I suggested.

请按照我的建议更改活动标记内名为android:name的所有属性。

#3


4  

Instead of:

<permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

to:

<uses-permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>

Try that.

#4


3  

<activity android:name="MainActivity"

should be formed like

应该形成像

<activity android:name="com.company.appname" 

to do this without errors go to package (right click) > android tools > rename app package

要做到这一点没有错误去包(右键单击)> android工具>重命名应用程序包

#5


1  

try to write activity name follow by "." Instead of

尝试写活动名称后跟“。”代替

<activity android:name="MainActivity"
                  android:label="@string/app_name">

use

<activity android:name=".MainActivity"
                  android:label="@string/app_name">

#6


1  

I met this same issue in android studio

我在android studio中遇到了同样的问题

what solve this is to let company domain to be all small letters,

解决这个问题的办法是让公司域名都是小写字母,

#7


0  

There's issue about this: http://code.google.com/p/android/issues/detail?id=37658 Capital letters can't be used in package names within permissions. You got (same as me) into difficult situation when you have deployed application with package name like this and you need to use GCM. I tried to use some kind of short form of permission:

存在以下问题:http://code.google.com/p/android/issues/detail?id = 37658大写字母不能用于权限内的包名称。当您使用这样的包名部署应用程序并且需要使用GCM时,您(与我相同)陷入困境。我尝试使用某种简短形式的许可:

<permission android:name=".permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name=".permission.C2D_MESSAGE" />

I also defined service in the same way. It had to be in application package. It worked on Android 4.3. Probably on 4.2 also. I know that on 4.0.3 it didn't.

我也以同样的方式定义了服务。它必须在应用程序包中。它适用于Android 4.3。也可能在4.2上。我知道4.0.3它没有。

#8


0  

make sure your package name is in small letters... worked for me

确保你的包裹名称是小写字母...为我工作

#9


0  

write the java package name and all folders name in lowercase, it will work fine...

用小写编写java包名和所有文件夹名,它会正常工作......

#10


0  

In my case I was mentioned the package name in small letters only. But for few of the activities I named it with partial name i.e android:name=".ContactUs" . After I solved it by prefixing full package name before all the activity name, service name and broadcast provider name in Manifest file.

在我的情况下,我只用小写字母提到了包名。但是对于一些活动,我用部分名称命名它,即android:name =“。ContactUs”。之后,我通过在清单文件中的所有活动名称,服务名称和广播提供程序名称之前添加完整包名称来解决它。

Working code

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

<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.DesignDemo">
    <activity
        android:name="vcan.doit.com.LoginActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="vcan.doit.com.MainActivity"
        android:theme="@style/Theme.DesignDemo" />
    <activity
        android:name="vcan.doit.com.CheeseDetailActivity"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>

    <service android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseMsgService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <service android:name="vcan.doit.com.PushNotification.MyAndroidFirebaseInstanceIdService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

    <activity
        android:name="vcan.doit.com.AboutUs"
        android:label="@string/abt_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
    <activity
        android:name="vcan.doit.com.ContactUs"
        android:label="@string/contact_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
    <activity android:name="vcan.doit.com.WriteToUs"
        android:label="@string/write_us"
        android:parentActivityName="vcan.doit.com.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="vcan.doit.com.MainActivity" />
    </activity>
</application>