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

Vin*_*tti 14 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>
Run Code Online (Sandbox Code Playgroud)

现在我必须添加一个权限(用于GCM)

<permission
        android:name="MYPACKAGENAME.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)

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

mik*_*iko 24

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

<?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>
Run Code Online (Sandbox Code Playgroud)

当您使用时启动您的权限名称.它自动以包名称为前缀.

您无法动态更改包名称,但您可以通过在build.gradle中定义applicationId然后使用$ {applicationId}在android清单中为名称添加前缀来执行某些操作.

在build.gradle中:

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.2"
    productFlavors {
       development {
           applicationId = "com.mypackage.development"
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的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>
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多信息:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

稍后的方法将允许您并排运行您的应用程序的开发风格.我希望这有帮助.


Tom*_*Tom 7

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

<permission
        android:name="${applicationId}.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)


Eri*_*rik 5

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


CRU*_*DER -3

你的答案是否定的..

一旦发布应用程序,您就无法更改包名称。包名称定义了您的应用程序的身份,因此如果您更改它,则它会被视为不同的应用程序,并且以前版本的用户无法更新到新版本。

换句话说

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

编辑:

Context.getPackageName()你要找的吗