美文网首页
ApplicationId 使用及对自定义属性xmlns的影响

ApplicationId 使用及对自定义属性xmlns的影响

作者: zizi192 | 来源:发表于2017-07-29 22:24 被阅读0次

    PackageName 包名

    所有的安卓app都必须有一个包名。包名是该程序在设备上的唯一标识,同时也是Google Play商店上架的唯一标识。这意味着,一旦改变了已发布程序的包名,新的应用程序会被识别为一个完全崭新的app。

    在此前的构建系统中,应用程序的包名由AndroidManifest文件的根元素里的package属性决定:

    //AndroidManifest.xml
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.my.app"
        android:versionCode="1"
        android:versionName="1.0" >
    

    包名还被用来命名资源文件,当引用任一资源时,需要使用import 包名.R语句。在上面的示例中,生成的R文件名为com.example.my.app.R。

    ApplicationId 应用Id

    使用新的 Android Gradle 构建系统,可以轻松构建多个不同版本的应用程序;例如,您可以构建一个“free”版本和“pro”版本的应用程序 (通过使用flavors),并且这些不同版本的程序在 Google Play 商店上应该有不同的包,这样他们可以被单独安装和购买,或者是同时安装两个,等等。同样,您还可以同时创建“debug”、“alpha”和“beta”版本的应用程序 (使用build types),而这些版本的程序同样可以使用唯一的包名。支持构建应用程序的不同版本时,同时需要保证java文件中导入的R类保持不变。ApplicationId刚好可以用来解耦包名称。

    多版本解耦方案

    1)使用applicationId作为应用程序的标识,通常在build.gradle中指定。用于在你的设备和 Google Play 商店来标识你的应用的包
    2)packageName用于在源代码中来引用R类,通常在AndroidManifest.xml中指定。

    一、在gradle 文件中,指定applicationId ,如下所示:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.1"
    
        defaultConfig {
            applicationId "com.example.my.app"
            minSdkVersion 15
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"
        }
        ...
    

    二、像以前一样,需要在 AndroidManifest文件中指定用于代码引入的包名,同上面的Andr​​oidManifest.xml示例。

    三、可以通过使用以下的 Gradle DSL 方法,为不同的flavors和构建类型修改您的应用程序的 applicationId:

    //app/build.gradle:
    
    productFlavors {
        pro {
            applicationId = "com.example.my.pkg.pro"
        }
        free {
            applicationId = "com.example.my.pkg.free"
        }
    }
    
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
    ....
    

    (在 Android Studio 中,您也可以在项目结构对话框中图形化地进行这些配置。上面的事例,可以在手机上安装4个apk,分别对应prodebug,freedebug,prorelease,freerelease四中buildVariant)

    注意: 出于兼容性原因,如果您没有在您的 build.gradle 文件中定义 applicationId,这个applicationId 将默认为 AndroidManifest.xml 中所指定的相同的值。在这种情况下,这两个显然未解耦,并且如果你试图重构您的代码也将会意外地更改您的应用程序的 id !在 Android Studio 中,新建的项目始终会指定这两个值。

    注 2: 包名称必须始终在默认 AndroidManifest.xml 文件中指定。如果您有多个manifest (例如一个 flavor 的特定的manifest或一个 buildType 的特定的manifest),该包名是可选的,但如果它被指定了,它必须和主manifest中指定的包完全相同。

    自定义属性与applicationId

    关于自定义属性,使用时需要添加域名xmlns。有以下两种方式:

    • 1)xmlns:app="http://schemas.android.com/apk/res/包名
      该方法只能在application模块使用,如果applicationId不同于package,则会出现编译失败,不能识别该属性

    • 2)xmlns:app="http://schemas.android.com/apk/res-auto"区别 applicationId更改为非包名时编译成功
      该方法可在application模块或library模块使用,且变更applicationId不会影响程序编译。

    in Gradle projects,always use http://schemas.android.com/apk/res-auto for custom attributes

    参考文档:
    http://blog.csdn.net/maosidiaoxian/article/details/41719357
    http://www.cnblogs.com/whoislcj/p/5711001.html

    相关文章

      网友评论

          本文标题: ApplicationId 使用及对自定义属性xmlns的影响

          本文链接:https://www.haomeiwen.com/subject/vnsflxtx.html