Ответ 1
Измените пакет имен с буквами Caps на маленькие буквы.
Привет, Я пытаюсь экспериментировать с 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
Пожалуйста, направляйте меня как новую рыбу в Android Sea.
Edit-1: Я заметил, что если я прокомментирую эту строку ниже, то приложение разворачивает и выполняет, но, очевидно, я не могу идти вперед без разрешения ниже... пожалуйста, помогите....
<permission android:name="Android.Test.permission.C2D_MESSAGE" android:protectionLevel="signature" />
Измените пакет имен с буквами Caps на маленькие буквы.
Измените ваш
android:name="MainActivity"
С
android:name=".MainActivity"
ИЛИ добавить полное имя пакета в нижнем регистре перед именем вашего класса
android:name="thepackage.MainActivity"
Измените все атрибуты с именем android:name
внутри тегов activity
, как я уже сказал.
Вместо:
<permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
в
<uses-permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
Попробуйте это.
<activity android:name="MainActivity"
должен быть сформирован как
<activity android:name="com.company.appname"
для этого без ошибок перейдите в пакет (щелкните правой кнопкой мыши) > инструменты Android > переименуйте пакет приложения
попробуйте написать название активности, следуя за. ". Вместо
<activity android:name="MainActivity"
android:label="@string/app_name">
использование
<activity android:name=".MainActivity"
android:label="@string/app_name">
Я встретил эту же проблему в студии Android.
что решает это, чтобы позволить домену компании быть маленькими буквами,
Вывод об этом: 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 это не так.
убедитесь, что ваше имя пакета составлено небольшими буквами... работал у меня
напишите имя пакета java и имя всех папок в нижнем регистре, это будет работать нормально...
В моем случае название пакета упоминалось только маленькими буквами. Но для некоторых видов деятельности я назвал его частичным именем, например, 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 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>
У меня была эта проблема. Память моего устройства была заполнена. Я решил свою проблему с освобождением памяти устройства.