包名称变量可以传递到Android源代码吗?

时间:2016-10-10 04:26:21

标签: java android android-studio

这通常是如何构建用于声明包和导入的Android代码:

package com.company.myApp

import com.company.myApp.SomeClass
import com.company.myApp.somePackage.SomeOtherClass

有没有办法使用Android Studio / Java /传递“编译时”变量或编译指示来有效地将“com.company.myApp”字符串传递给源代码?类似的东西:

package BASE_PACKAGE_NAME

import BASE_PACKAGE_NAME.SomeClass
import BASE_PACKAGE_NAME.somePackage.SomeOtherClass 

1 个答案:

答案 0 :(得分:2)

我个人不知道任何能为你做这件事的事 但正如我在http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename

中读到的那样
  

您构建的.apk的清单中使用的最终包,并且是   您的应用在您的设备和Google Play中所知的套餐   store,是"应用程序ID"。

     

源代码中用于引用R类的包,   并继续解决任何相关活动/服务注册   被称为"包"。

您可以在gradle文件中指定应用程序ID,如下所示:

应用程序/的build.gradle:

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"
    }
  

关键部分来了:当你完成上述任务时,两者   包是独立的。你可以完全自由地重构你的   代码 - 更改用于您的活动的内部包   服务,更新您的Manifest包,并重构您的导入   声明。这与你的最终身份无关   应用程序,现在总是将成为applicationId   在Gradle文件中指定。

     

您可以为应用程序和构建类型改变应用程序的applicationId   使用以下Gradle DSL方法:

应用程序/的build.gradle:

productFlavors {
    pro {
        applicationId = "com.example.my.pkg.pro"
    }
    free {
        applicationId = "com.example.my.pkg.free"
    }
}

buildTypes {
    debug {
        applicationIdSuffix ".debug"
    }
}
....