25

嗨,我正在尝试使用 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>

我的设备是 HTC OneX

  • 安卓版本:4.03
  • HTC Sense 版本:4.0
  • 软件编号:1.29.110.11
  • HTC SDK API 级别:4.12
  • HTC 扩展版本:HTCExtension_403_1_GA_7

请指导,因为我是 Android Sea 中的新鱼。

Edit-1:我注意到,如果我在下面评论这一行,那么应用程序确实会部署并执行,但显然我不能在没有下面提到的权限的情况下继续前进......请帮助......

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

12 回答 12

60

将带有大写字母的名称包更改为小写字母。

于 2012-09-12T21:25:29.603 回答
9

改变你的

android:name="MainActivity"

android:name=".MainActivity"

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

android:name="thepackage.MainActivity"

按照我的建议,更改标签android:name内所有名为 as 的属性。activity

于 2015-03-24T16:44:11.080 回答
4

代替:

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

到:

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

试试看。

于 2013-06-06T14:44:20.627 回答
3
<activity android:name="MainActivity"

应该形成

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

要做到这一点而不会出错,请转到包(右键单击)> android 工具> 重命名应用程序包

于 2012-11-22T08:31:11.863 回答
1

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

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

采用

<activity android:name=".MainActivity"
                  android:label="@string/app_name">
于 2013-09-12T05:59:07.433 回答
1

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

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

于 2014-07-15T15:43:55.600 回答
0

有关于此的问题: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" />

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

于 2013-11-12T07:06:45.857 回答
0

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

于 2015-04-21T19:08:08.717 回答
0

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

于 2018-05-07T08:13:06.330 回答
0

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

工作代码

<?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>

于 2018-08-06T05:39:45.080 回答
0

我有这个问题。我的设备内存已满。我解决了释放设备内存的问题。

于 2019-06-24T09:57:14.513 回答
0

对于 Android 12 (Android ", API Level 31),由于行为变化,您会发现同样的错误。

要摆脱它,您必须将android:exported="true"(或false*)添加到在应用程序文件中声明了 s 的任何<activity><activity-alias><service><receiver>组件。<intent-filter>AndroidManifest.xml

* 更多信息:相关官方文档

于 2022-02-05T02:21:00.787 回答