Hallo, ich versuche mit gcm zu experimentieren, kann aber nicht, dass es funktioniert. Ich weiß nicht, wo ich mich damit beschäftige. Unten ist der Fehler, den ich erhalte. Ich versuche, meine Anwendung direkt auf dem Gerät bereitzustellen und von dort aus zu debuggen, aber wenn ich versuche, sie bereitzustellen, gibt es diesen Fehler
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>
Mein Gerät ist HTC OneX
Bitte Guide, wie ich neue Fische in Android Sea bin.
Edit-1: Ich habe bemerkt, dass, wenn ich die folgende Zeile kommentiere, die Anwendung implementiert und ausgeführt wird, aber offensichtlich kann ich nicht ohne die unten angegebene Erlaubnis vorgehen ... bitte helfen Sie ....
<permission Android:name="Android.Test.permission.C2D_MESSAGE" Android:protectionLevel="signature" />
Namenspaket mit Großbuchstaben in Kleinbuchstaben ändern.
Ändere deine
Android:name="MainActivity"
BIS
Android:name=".MainActivity"
ODER fügt den vollständig qualifizierten Paketnamen vor dem Klassennamen in Kleinbuchstaben hinzu
Android:name="thepackage.MainActivity"
Ändern Sie alle Attribute, die als Android:name
innerhalb der activity
-Tags bezeichnet werden, wie von mir vorgeschlagen.
Anstatt:
<permission Android:name="Android.permission.C2D_MESSAGE" Android:protectionLevel="signature"/>
zu:
<uses-permission Android:name="Android.permission.C2D_MESSAGE" Android:protectionLevel="signature"/>
Versuch das.
<activity Android:name="MainActivity"
sollte wie gebildet werden
<activity Android:name="com.company.appname"
um dies ohne Fehler zu tun, gehen Sie zu Paket (rechte Maustaste)> Android-Tools> App-Paket umbenennen
versuchen Sie, den Aktivitätsnamen zu schreiben, gefolgt von "." Anstelle von
<activity Android:name="MainActivity"
Android:label="@string/app_name">
benutzen
<activity Android:name=".MainActivity"
Android:label="@string/app_name">
Ich habe dieses Problem in Android Studio getroffen
was zu lösen ist, Unternehmensdomäne alle kleinen Buchstaben sein zu lassen,
Dazu gibt es ein Problem: http://code.google.com/p/Android/issues/detail?id=37658 Großbuchstaben können nicht in Paketnamen innerhalb von Berechtigungen verwendet werden. Sie sind (genau wie ich) in eine schwierige Situation geraten, als Sie eine Anwendung mit einem solchen Paketnamen bereitgestellt haben und GCM verwenden müssen . Ich habe versucht, eine Art kurze Erlaubnis zu verwenden:
<permission Android:name=".permission.C2D_MESSAGE" Android:protectionLevel="signature" />
<uses-permission Android:name=".permission.C2D_MESSAGE" />
Ich habe auch Service auf dieselbe Weise definiert. Es musste im Anwendungspaket ..__ sein. Es funktionierte auf Android 4.3. Wahrscheinlich auch auf 4.2. Ich weiß, dass es am 4.0.3 nicht so war.
stellen Sie sicher, dass Ihr Paketname in Kleinbuchstaben ist
In meinem Fall wurde mir der Paketname nur in Kleinbuchstaben genannt. Aber für einige der Aktivitäten habe ich es mit dem partiellen Namen, dh Android:name=".ContactUs"
, benannt. Nachdem ich das Problem gelöst habe, indem der vollständige Paketname vor dem Aktivitätsnamen, dem Dienstnamen und dem Namen des Broadcast-Anbieters in der Manifest-Datei vorangestellt wurde.
Arbeitscode
<?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>
Ich hatte dieses Problem. Mein Gerätespeicher war voll. Ich habe mein Problem mit der Freigabe des Gerätespeichers gelöst.
schreiben Sie den Namen des Java-Pakets und den Namen aller Ordner in Kleinbuchstaben.