2013-06-09 5 views
8

Während meine apk generiert wird, führe ich den Befehl aapt dump badging darauf aus. Ich halte die Aufnahme des folgenden Fehler:aapt ERROR bekomme 'android: name' attribut: attribut ist kein string-wert

application: label='Name' icon='res/drawable/icon_128x128.png'
application-debuggable launchable-activity: name='co.package.name.MainActivity' label='Name' icon='' ERROR getting 'android:name' attribute: attribute is not a string value

Ich habe versucht, einen Markennamen für alle Aktivitäten hinzuzufügen und alle anderen Werte-xxx Ordner unter/res zu entfernen, aber vergebens. Wenn ich jedoch ein ganz neues Projekt erstelle und ein neues APK erzeuge, kann das APK mit dem Befehl aapt dump badging erfolgreich ausgeführt werden.

Ich verglich die gedruckte Nachricht sowohl APK und fand einen Hauptunterschied:

Nachricht von apk Erfolg:

application-label:'AppLabel'
application-icon-160:'res/drawable-xhdpi/icon_128x128.png'
application-icon-240:'res/drawable-xhdpi/icon_128x128.png'
application-icon-320:'res/drawable-xhdpi/icon_128x128.png'
application: label='AppLabel' icon='res/drawable-xhdpi/icon_128x128.png'
application-debuggable
launchable-activity: name='com.demo.testApp.MainActivity' label='' icon='

Nachricht von Fehlgeschlagen apk:

application-label:'MyApp'
application-label-ja:'MyApp'
application-label-de:'MyApp'
application-label-he:'MyApp'
application-label-zh:'MyApp'
application-label-fi:'MyApp'
application-label-nl:'MyApp'
..
.. (all languages would be attached, and finally the error occurs)
..
application: label='MyApp' icon='res/drawable/icon_128x128.png'
application-debuggable
launchable-activity: name='com.name.myapp.MainActivity' label='MyApp' icon=''
ERROR getting 'android:name' attribute: attribute is not a string value


----- Bearbeiten ------
Ich fand, dass es keine Relevanz für "Sprache" gibt. Ich habe meine Manifest-Datei geändert und sichergestellt, dass kein "application-label-XX" ausgedruckt wird, und der Fehler ist immer noch derselbe.

Unten ist mein Manifest-Datei

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <supports-screens android:anyDensity="true" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <!-- Location --> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

    <!-- Camera --> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="true" /> 
    <uses-feature 
     android:name="android.hardware.camera.front" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.autofocus" 
     android:required="false" /> 

    <!-- GCM Necessary --> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

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

    <uses-permission android:name="co.package.name.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <!-- Calendar R/W --> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/icon_128x128" 
     android:label="@string/app_name" 
     > 
     <!-- GCM meta-data --> 
     <meta-data 
      android:name="com.arrownock.push.SERVICE_TYPE" 
      android:value="GCM" /> 
     <meta-data 
      android:name="com.arrownock.push.gcm.SENDER_ID" 
      android:value="@string/gcm_project_id" /> 
     <meta-data 
      android:name="com.arrownock.push.APP_KEY" 
      android:value="@string/light_appkey" /> 

     <meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/fb_id" /> 

     <activity 
      android:name=".Main" 
      android:launchMode="singleTask" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="co.package.name.SplashHP" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SettingsHP" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="co.package.name.LocationSelect" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="co.package.name.SettingOptionAlarm" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SettingOptionNotify" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SettingOptionShare" 
      android:launchMode="singleTask" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 

       <data 
        android:host="settingshare" 
        android:scheme="oauth" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="co.package.name.HpCalendar" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SMSList" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SMSEditor" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.SMSChooseToSend" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.ShareToFB" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.ActPOI" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 

     <activity 
      android:name="com.facebook.LoginActivity" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 
     <activity 
      android:name="co.package.name.LogInOutFB" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     </activity> 

     <activity 
      android:name="co.package.name.LoginTwitter" 
      android:launchMode="singleTask" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 

       <data 
        android:host="t4jsample" 
        android:scheme="oauth" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name="co.package.name.AlarmReceiver" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="@string/action_alarm" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </receiver> 

     <!-- GCM Service --> 
     <receiver 
      android:name="com.arrownock.push.AnPushGCMReceiver" 
      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="co.package.name" /> 
      </intent-filter> 
     </receiver> 
     <service android:name="com.arrownock.push.GCMIntentService" /> 

     <receiver 
      android:name="co.package.name.ExtendedReceiver" 
      android:exported="true" 
      android:icon="@drawable/icon_128x128" 
      android:label="Receiver" > 
      <intent-filter> 
       <action android:name="com.arrownock.push.PushService.MSG_ARRIVAL" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

Vielleicht ein falsches Format gibt es oder in meinem Manifest-Datei Typo?

------ bearbeiten ----
ich vielleicht auch prüfen, es ist eine Frage der Decodierung. In meiner Umgebung benutze ich utf-8. Vielleicht stimmt etwas nicht innerhalb des Erstellungsprozesses von XML in Binärdatei?

Wenn etwas unangemessener Verdächtiger oben ist, entschuldige ich mich aufrichtig. Ich habe drei Tage an diesem Thema festgehalten und kann wirklich keinen Fortschritt erreichen. Habe viele Dinge probiert und der Fehler ist immer derselbe. Jeder Vorschlag oder Kommentar würde sehr geschätzt werden.

+0

Zeigen Sie Ihr vollständiges Manifest. Ich schätze, Sie haben einen Tippfehler in Ihrem Manifest oder vielleicht in einer Ihrer Ressourcendateien. – CocoNess

+0

Haben Sie irgendwelche Beweise für ein Problem mit * Ihrer App *?Dies könnte genauso gut ein Problem mit ** aapt dump badging sein **. – CommonsWare

+0

@TanjaV Ich habe meine Manifest-Datei angehängt. Ich würde auch meine String-Datei untersuchen. –

Antwort

11

Do you mean this may also be caused by a broken aapt tool?

Sicher. Die Android-Tools haben in der Vergangenheit viele Bugs gehabt, und es gibt keinen Grund anzunehmen, dass aapt dump badging irgendwie perfekt ist. In der Tat, your very issue has already been filed as a bug. Also, außer du bist auch sehen ein Problem in der Ausführung Ihrer App, die hier gebunden sein könnte, würde ich davon ausgehen, dass aapt dump badging das Element mit dem Problem ist, nicht unbedingt Ihre App.

Wenn Sie die R22-Tools noch nicht aktualisiert haben, können Sie dies tun, um zu sehen, ob dieser Fehler behoben wurde und das Problem einfach nicht behoben wurde. Wenn Sie sich in den R22-Tools befinden, können Sie einen Kommentar zu diesem Problem hinzufügen, dies aufzeigen und einen Link zu dieser SO-Frage einfügen, sodass das Tools-Team einen anderen Datenpunkt in Bezug auf das Problem hat.

+1

Maaaaany danke !!!! Dies ist der Hauptgrund! Ich habe die @string Referenzen in meinem Intent-Filter auf hard-code geändert und das Problem wurde gelöst! Wie in der Beschreibung im Problembericht, ist es wirklich unvernünftig, dass Android erfolgreich nur aapt Dump-Badging fehlgeschlagen. Ich möchte Ihnen meine ganze Monatsquote zur Verfügung stellen, dank Ihnen, dass Sie mir geholfen haben, dieses Problem zu lösen !! Vielen Dank!!! –

6

Die gleiche Geschichte hier. Ich habe diese Nachricht erhalten, als ich eine funktionierende APK in Google Play hochgeladen habe. Ich konnte es mit dem Befehl aapt reproduzieren (in ... \ android-sdk \ platform-tools). Es stellte sich heraus, dass es sich um eine String-Ressource im Namen eines Intent-Filters handelte, und wurde durch hartes Codieren behoben.

Es wäre mir eine loooooong Zeit genommen, diese :)

ohne diese Antwort zu debuggen
+0

Ich bin mit dem gleichen Problem und ich habe alle möglichen Lösungen auf SO aber keine Hilfe ausprobiert. Ich habe deine Lösung versucht, aber in Ader. Irgendwelche Hilfe auf dem gleichen? –

+0

Das war genau mein Problem dank –

2

Check Aktionsname

<action android:name="@string/action_restart" /> 

Änderung

<action android:name="kr.mint.test.restart" /> 
4

Wenn Sie Gradle verwenden und Wenn Ihre Ersetzung auf einer Ihrer Build-Varianten basieren soll, können Sie eine benutzerdefinierte Ersetzungszeichenfolge anstelle von [email protected] verwenden. (http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support)

In Ihrer build.gradle Datei definiert einen Wert für jeden Build Geschmack in einem "manifestPlaceholders" Abschnitt:

productFlavors { 
    pro { 
     manifestPlaceholders = [ 
      proFreeString:"my.pro.string" 
     ] 
    } 
    free { 
     manifestPlaceholders = [ 
      proFreeString:"my.free.string" 
     ] 
    } 
} 

Dann können Sie "proFreeString" als Ersatz in Ihrer Manifest-Datei verwenden:

 <intent-filter> 
      <action android:name="com.foo.${proFreeString}.ACTION_1" /> 
     </intent-filter> 
0

Ich hatte gerade das gleiche Problem. Es wurde von einer Zeichenfolge verursacht, die nicht gefunden werden konnte.

android: label = "@ Zeichenfolge/app_name_launcher"

diese Zeichenfolge im Ordner Werte/strings.xml einfach nur knapp sein Ziel existiert.

Lustig ist, ich könnte die .apk-Datei trotzdem erstellen.

2

Ich habe das gleiche Problem und ich habe es gelöst, indem Sie das @string von manifex.xml entfernen.

Original (Fehler):

string.xml

<string name="alarm_auto_sync">auto_syncx</string> 

Manifex.xml

<intent-filter> 
    <action android:name="@string/alarm_auto_sync" > 
</intent-filter> 

Above würde gut funktionieren wie erwartet. Aber wenn ich apk zu Google hochladen spielen es bewirkt, dass die aapt ERROR getting 'android:name' attribute: attribute is not a string value

Das Problem wie folgt gelöst wurde:

Korrigiert:

Manifex.xml

<intent-filter> 
     <action android:name="auto_syncx" > 
    </intent-filter> 

Sie müssen nur die Aktualisierung @string zur exakten Zeichenfolge. Hoffe das würde dir helfen!

+0

Danke, ich habe das gleiche Problem. – diogojme

0

Grundsätzlich wie die Fehlermeldung vorschlagen, um dies zu lösen, gehen Sie einfach durch jede Zeile Ihrer Manifest-Datei und stellen Sie sicher, dass jeder "android: name" einen richtig verknüpften "String-Wert" hat.

Besser noch hart schreiben Sie die erforderliche Zeichenfolge für jedes "android: name" Attribut in der Manifest-Datei, um das Problem zu debuggen.