Android:是否可以在AndroidManifest.xml文件中读取包名称

时间:2013-05-08 11:04:35

标签: android android-manifest

我有一个问题,是否可以在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" />

是否可以在上述权限标记中动态地用com.mypackagename替换MYPACKAGENAME。

6 个答案:

答案 0 :(得分:21)

您可以删除名称的包名称部分:

<?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然后使用$ {applicationId}在android清单中为名称添加前缀来执行某些操作。

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

稍后的方法将允许您在生产版本旁边运行应用程序的开发风格。我希望这会有所帮助。

答案 1 :(得分:3)

您可以使用${applicationId}替换您的包名称,例如

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

答案 2 :(得分:1)

尚未在此处发布的替代方法是"${packageName}"。这很有用,例如,如果您正在开发具有特定程序包名称的库,但是使用该库的应用程序将具有不同的程序包名称和/或应用程序ID:库清单中的"${packageName}"将扩展为库的软件包名称。

答案 3 :(得分: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>

答案 4 :(得分:-1)

AndroidManifest.xml(顾名思义)用于声明和显示内容。

可以在应用程序中动态读取包名称,因为它在清单文件中声明。

理论上,无法在AndroidManifest中读取或传递值。您需要在应用程序中执行动态操作。

答案 5 :(得分:-2)

您的回答是 ..

发布应用后,您无法更改包名称。包名称定义了应用程序的标识,因此如果您更改它,则它被视为不同的应用程序,而以前版本的用户无法更新到新版本。

换句话说

Android将具有不同包名称的应用程序视为不同的应用程序

修改

您正在寻找Context.getPackageName()