我找到了一个出色的RegEx来提取camelCase或TitleCase表达式的一部分.
(?<!^)(?=[A-Z])
Run Code Online (Sandbox Code Playgroud)
它按预期工作:
例如使用Java:
String s = "loremIpsum";
words = s.split("(?<!^)(?=[A-Z])");
//words equals words = new String[]{"lorem","Ipsum"}
Run Code Online (Sandbox Code Playgroud)
我的问题是它在某些情况下不起作用:
在我看来,结果应该是:
换句话说,给定n个大写字符:
关于如何改进这个正则表达式的任何想法?
我有两种口味,比如香草和巧克力.我也有Debug和Release构建类型,我需要Vanilla Release才能有一个字段为true,而其他3个组合应该是false.
def BOOLEAN = "boolean"
def VARIABLE = "VARIABLE"
def TRUE = "true"
def FALSE = "false"
VANILLA {
debug {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
release {
buildConfigField BOOLEAN, VARIABLE, TRUE
}
}
CHOCOLATE {
buildConfigField BOOLEAN, VARIABLE, FALSE
}
Run Code Online (Sandbox Code Playgroud)
我有一个错误,所以我猜调试和发布技巧不起作用.有可能这样做吗?
我曾经有过以下项目风味:
最初唯一的区别是applicationId/packageName.现在有一个不同的java文件.准确地说是自定义ArrayAdapter.解决方案是创建src/Apple和src/Orange继承src/main.我删除从Java文件src/main并把拷贝到src/Apple和src/Orange和适当修改它.世界上一切都很好.
快进几周,现在大约有10个不同的Apple和Orange之间的java文件.再说......没什么大不了的.易于操作.在src/Apple和中分隔java文件src/Orange.
快进到今天.我需要稍微修改一下,因为我希望每个都有免费的高级版本.免费版和高级版仅因URL而异.我打算简单地创建一个名为的新类型:
我有一个困境.从现在起src/Apple,src/Orange有10个不同的文件已被更改...如果我更改任何java文件,AppleFree我必须确保我做同样的事情ApplePremium.我有点处于十字路口,希望我的问题在这一点上有意义.我提出了三种可能的解决方案,但我不确定如何实现它们/什么是正确的方法/解决方案不是我想要的.
使用if语句
if (BuildConfig.FLAVOR==appleFree) {//use free Url} else {// use premium url}
问题:两个Urls在技术上都编译成了apk.我不想要这个.
让src/AppleFree和src/ApplePremium以某种方式从src/Apple父目录继承.
问题:不知道我会怎么做.
在build.gradle中添加免费和高级网址是这样的吗?
productFlavors {
appleFree {
applicationId "com.example.apple.free"
versionName "1.0"
url "http://freeurl.com"
versionCode 1
}
applePremium {
applicationId "com.example.apple.premium"
versionName "1.0"
url "http://premiumurl.com"
versionCode 1 …Run Code Online (Sandbox Code Playgroud) android gradle android-studio build.gradle android-gradle-plugin
我正在尝试为应用程序变体设置signingConfig, manifestPlaceholders, 。buildConfigField我可以为每个构建类型设置它们或者!ProductFlavor 独立,但我需要的是根据 ProductFlavor和!构建类型。
buildTypes{
getByName("debug"){}
getByName("release"){}
create("staging"){}
}
productFlavors {
create("global"){}
create("local"){}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,有 3 种不同的 buildType 和 2 种不同的 ProductFlavors。这意味着总共有 6 个 APK 变体。对于每个APK(globalRelease、globalStaging、globalDebug、localRelease、localStaging、localDebug),我想使用不同的signingConfig。我该如何设置?
尝试过:
我想为每种构建类型和风格解析manifestPlaceholders依赖项.例如,我有
productFlavors {
dev {
manifestPlaceholders = ['applicationLabel': 'DevFlavor']
}
prod {
manifestPlaceholders = ['applicationLabel': 'ProdFlavor']
}
.....
buildTypes {
debug {
def old_name = manifestPlaceholders.get('applicationLabel'); // every time is null
// def old_name = productFlavors.dev.manifestPlaceholders.get('applicationLabel'); // ITS OK, but not dynamic
manifestPlaceholders = [applicationLabel: old_name + ' Dev']
}
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方案可以添加'Dev'后缀来调试产品口味?
谢谢你的帮助
我的情况是我有多种口味的应用程序.对于前者 开发,舞台,生产口味.
因此,dev将指向dev服务器url,dev app id等,并且同样适用于舞台和制作.对于我的strings.xml中存在的app id,我可以使用以下代码替换它们 -
variant.mergeResources.doLast {
File valuesFile = file("${buildDir}/res/all/${variant.dirName}/values/values.xml")
println("Replacing app id in " + variant.dirName)
String content = valuesFile.getText('UTF-8')
def appid;
String variantDirName = variant.dirName;
if (variantDirName.contains("dev")) {
appid = '1234_dev'
} else if(variantDirName.contains("stage")) {
appid = '1234_stage'
} else if(variantDirName.contains("prod")) {
appid = '1234_prod'
} else {
appid = '1234_unknown'
}
content = content.replaceAll(/some_app_id/, appid)
valuesFile.write(content, 'UTF-8')
}
Run Code Online (Sandbox Code Playgroud)
我的strings.xml在哪里 -
<string name="app_id">some_app_id</string>
Run Code Online (Sandbox Code Playgroud)
现在,服务器URL存储在我的Config.java文件中,作为正常的常量 -
public static final String BASE_URL = "http://dev.blahblah.com";
Run Code Online (Sandbox Code Playgroud)
所以问题是如何根据不同的风格从我的build.gradle文件中更改Config.java中的这一行?
android ×5
gradle ×5
java ×3
build.gradle ×2
build-tools ×1
camelcasing ×1
groovy ×1
kotlin ×1
regex ×1
title-case ×1