14

AndroidManifest.xml 内のパッケージ名を読み取ることは可能ですか?

つまり

私は以下のように AndroidManifest.xml を持っています

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

ここで、許可を追加する必要があります (GCM に使用)

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

上記の許可タグで MYPACKAGENAME を com.mypackagename に動的に置き換えることは可能ですか。

4

6 に答える 6

25

名前のパッケージ名の部分を削除できます。

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

パーミッション名を . パッケージ名のプレフィックスが自動的に付けられます。

パッケージ名を動的に変更することはできませんが、build.gradle で applicationId を定義し、Android マニフェストで名前の前に ${applicationId} を付けることで、特定のことを行うことができます。

build.gradle で:

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

そして、あなたの AndroidManifest.xml には次のものがあります:

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

ここからもう少し見つけることができます: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

後のアプローチでは、アプリの開発フレーバーを本番バージョンと並べて実行できます。これが役立つことを願っています。

于 2014-08-07T15:32:44.607 に答える
0

相対的な使用法を使用できます。

静的:

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

相対的 :

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

名前がドットで始まる場合は、宣言された MYPACKAGENAME を配置するようなものです

<?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>
于 2015-09-28T21:19:45.417 に答える
-1

AndroidManifest.xml は (その名前が示すように) ものを宣言およびマニフェストするためのものです。

パッケージ名はマニフェスト ファイルで宣言されているため、アプリケーション内でパッケージ名を動的に読み取ることができます。

理論的には、AndroidManifest 内で値を読み取ったり渡したりすることはできません。アプリケーション内で動的操作を行う必要があります。

于 2013-05-08T11:43:19.353 に答える
-2

あなたの答えはノーです..

アプリケーションを公開すると、パッケージ名を変更できなくなります。パッケージ名はアプリケーションの ID を定義するため、変更すると別のアプリケーションと見なされ、以前のバージョンのユーザーは新しいバージョンに更新できなくなります。

言い換えると

Android は、異なるパッケージ名のアプリケーションを完全に別のアプリケーションと見なします

編集:

それはContext.getPackageName()あなたが探しているものですか

于 2013-05-08T11:13:15.667 に答える