每一个applicationId唯一标识了一个应用,它的值就是进程名
应用双开,只要把applicationId改一下名字即可,系统就会生成一个新的进程但是里面的代码和原有的代码完全一样!
packageName:被代码(如资源文件R.java)或Manifest清单中声明(如类的包路径和packageName相同时,activity的name缩写为”.xxxActivity“)使用。
当applicationId不存在时,packageName默认为applicationId。
当applicationId存在时,packageName仅有其本身的功能,而applicationId将作为唯一标识
1.新建 config/config.gradle
ext { // app 相关版本控制 isLibray = false versions = [ minSdkVersion : 29, targetSdkVersion : 29, compileSdkVersion: 29, buildToolsVersion: "29.0.3", versionCode : 30001, versionName : "3.0.1", apkName : "aaa", applicationId : "com.example.aaa" ] }
2.在项目 build.gradle中引入 config/config.gradle
apply from: 'config/config.gradle'
3.在 app build.gradle中使用 config/config.gradle定义的内容
android { def versions = rootProject.ext.versions compileSdkVersion versions.compileSdkVersion buildToolsVersion versions.buildToolsVersion defaultConfig { manifestPlaceholders = [apkName : versions.apkName] 指定apkName applicationId versions.applicationId 指定applicationId minSdkVersion versions.minSdkVersion targetSdkVersion versions.targetSdkVersion versionCode versions.versionCode versionName versions.versionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } }
在 AndroidManifest中使用apkName
<application android:name=".Application" android:allowBackup="true" android:label="${apkName}"> 使用build.gradle定义的 apkName
4.定义输出apk的文件名格式 在build.gradle android标签下
android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = rootProject.getName()+"_" + productFlavors[0].name+"_" + buildType.name + "_v" + defaultConfig.versionName + "-${releaseTime()}.apk" } }
def gitShortVersion = 'git rev-parse --short HEAD' def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) }
applicationVariants.all { variant -> variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData -> apkData.outputFileName = versions.apkName + "_" + variant.versionName + "_" + gitShortVersion.execute().text.trim() + "_" + releaseTime() + "_" + variant.buildType.name + ".apk" } }
5.gradle文件中输出 变量值 使用println()即可
6.在gradle文件中读取gradle.properties的属性值
定义属性:
isModule=false
读取:在Module 的build.gradle 中
isModule.toBoolean() 或者 直接取isModule就可以了
7.在gradle文件中读取local.properties
Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def sdkDir = properties.getProperty('sdk.dir') def ndkDir = properties.getProperty('ndk.dir')
8.在java代码中读取gradle.propeties 或者 build.gradle的属性
在build.gradle文件中的android 下的 defaultConfig中定义如下:String要加转意符 Boolean不需要,
其中,buildConfigField定义的方式是
buildConfigField 类型,变量名,值
android { namespace 'com.example.overlay.playerstatus' compileSdk 32 def cfgs = rootProject.ext.cfgs def MYNAME = "xiaowang" def isgirl = true defaultConfig { applicationId "com.example.overlay.playerstatus" minSdk 29 targetSdk 32 versionCode versionCode versionName "1.0" buildConfigField "String", "name", "\"${MYNAME}\"" buildConfigField "Boolean", "isgirl", "${isgirl}" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } }
在代码中引用
BuildConfig.name
8.在resouce里使用gradle里的配置项,读取gradle.propeties 或者 build.gradle的属性
resValue定义的方式是
resValue XML中的类型,变量名,值
defaultConfig { applicationId "com.xxx.autotest.all" minSdkVersion 22 targetSdkVersion 32 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //BEGIN. ADDED FOR JNI IMPLEMENT. externalNativeBuild { cmake { cppFlags "" } } ndk { abiFilters "armeabi-v7a" moduleName "serial_port" // 生成so的名称 ldLibs "log", "z", "m", "jnigraphics", "android" } buildConfigField "String","mFlashSize","\"${mFlashSize}\"" buildConfigField "String","mDdrSize","\"${mDdrSize}\"" resValue "string","wang","${wang}" //FINISH. ADDED FOR JNI IMPLEMENT. }
在布局文件中引用字符串资源
App里如何获取gradle里的配置信息? - 简书 (jianshu.com)