2013-05-08 6 views
9

Ho una domanda, è possibile leggere il nome del pacchetto all'interno AndroidManifest.xmlAndroid: E 'possibile leggere il nome del pacchetto all'interno AndroidManifest.xml il file

intendo

Ho un AndroidManifest.xml come sotto

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

.... 

</manifest> 

Ora devo aggiungere un permesso (usato per GCM)

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

È possibile sostituire MYPACKAGENAME con com.mypackagename in modo dinamico nel tag di autorizzazione sopra riportato.

+0

no. non che io sappia. potresti comunque essere in grado di memorizzarlo in strings.xml. – Shark

+0

Non è possibile aggiornare dinamicamente il file manifest. – hardartcore

+0

AFAIK non possiamo memorizzare l'accesso al nome del pacchetto anche da string.xml o è possibile? –

risposta

-2

La tua risposta è NO ..

Una volta pubblicare l'applicazione, non è possibile modificare il nome del pacchetto. Il nome del pacchetto definisce l'identità della tua applicazione, quindi se la cambi, viene considerata un'applicazione diversa e gli utenti della versione precedente non possono aggiornarsi alla nuova versione.

In altre parole

Android considera applicazione con diverso nome del pacchetto come diversa applicazione del tutto

EDIT:

È Context.getPackageName() siete alla ricerca di

+1

La mia intenzione non è quella di modificarlo ma di leggerlo nello stesso file AndroidManifest.xml. –

+0

è possibile ottenere il nome del pacchetto in modo programmatico ma non è possibile impostare o modificare in file manifest ANdroid – CRUSADER

-1

AndroidManifest.xml è (come suggerisce il nome) per dichiarare e manifestare le cose.

Leggere il nome del pacchetto dinamicamente all'interno dell'applicazione è possibile perché dichiarato nel file manifest.

Teoricamente non è possibile leggere o passare valori all'interno di AndroidManifest. Dovrai eseguire le operazioni dinamiche all'interno della tua applicazione.

19

È possibile eliminare la parte del nome del pacchetto del nome:

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

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

    ... 
</manifest> 

Quando si avvia il nome consenso con. ottiene automaticamente il prefisso del nome del pacchetto.

Non è possibile modificare dinamicamente il nome del pacchetto, ma è possibile eseguire determinate operazioni definendo applicationId in build.gradle e quindi anteponendo nomi nel manifest Android con $ {applicationId}.

in build.gradle:

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.2" 
    productFlavors { 
     development { 
      applicationId = "com.mypackage.development" 
     } 
    } 
} 

E poi nei tuoi AndroidManifest.xml hanno:

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

    <permission 
     android:name="${applicationId}.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    ... 
</manifest> 

si può trovare un po 'di più da qui: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

approccio tardi permetterà per far funzionare l'aspetto dello sviluppo della tua app accanto alla tua versione di produzione. Spero che aiuti.

+0

Buona domanda, ho incontrato lo stesso problema quando impostare il nome del pacchetto in 'android: host = {packagename}' nell'intento-filtro – Ninja

+0

@miko Hey , puoi confermare che è "Quando avvii il tuo nome di autorizzazione con. ottiene automaticamente il prefisso del nome del pacchetto". questo è vero per ogni stringa che creo all'interno di AndroidManifest? – Geri

+0

Sarebbe solo risolvere una grande quantità di problemi dalla mia parte. C'è qualche documentazione che punta a questo? – Geri

0

è possibile utilizzare un utilizzo relativo.

statico:

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

Relativa:

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

quando il nome inizia con dot è come mettere nomedelmiopacchetto dichiarato nel

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

.... 

</manifest> 
2

È possibile utilizzare ${applicationId} per sostituire il pacchetto nome, es.

<permission 
     android:name="${applicationId}.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
Problemi correlati