我有一个问题,是否可以在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。
答案 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()