相关疑难解决方法(0)

RegEx分裂camelCase或TitleCase(高级)

我找到了一个出色的RegEx来提取camelCase或TitleCase表达式的一部分.

 (?<!^)(?=[A-Z])
Run Code Online (Sandbox Code Playgroud)

它按预期工作:

  • 价值 - >价值
  • camelValue - >驼峰/价值
  • TitleValue - >标题/价值

例如使用Java:

String s = "loremIpsum";
words = s.split("(?<!^)(?=[A-Z])");
//words equals words = new String[]{"lorem","Ipsum"}
Run Code Online (Sandbox Code Playgroud)

我的问题是它在某些情况下不起作用:

  • 案例1:VALUE - > V/A/L/U/E.
  • 案例2:eclipseRCPExt - > eclipse/R/C/P/Ext

在我看来,结果应该是:

  • 案例1:价值
  • 案例2:eclipse/RCP/Ext

换句话说,给定n个大写字符:

  • 如果n个字符后跟小写字符,则组应为:(n-1个字符)/(第n个字符+低字符)
  • 如果n个字符在末尾,则该组应为:(n个字符).

关于如何改进这个正则表达式的任何想法?

java regex title-case camelcasing

76
推荐指数
5
解决办法
4万
查看次数

为特定flavor AND buildType定义buildconfigfield

我有两种口味,比如香草和巧克力.我也有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)

我有一个错误,所以我猜调试和发布技巧不起作用.有可能这样做吗?

android build-tools gradle android-gradle-plugin

47
推荐指数
4
解决办法
1万
查看次数

如何从Android Studio中的根风格继承两种构建风格?

我曾经有过以下项目风味:

  1. 苹果
  2. 橙子

最初唯一的区别是applicationId/packageName.现在有一个不同的java文件.准确地说是自定义ArrayAdapter.解决方案是创建src/Applesrc/Orange继承src/main.我删除从Java文件src/main并把拷贝到src/Applesrc/Orange和适当修改它.世界上一切都很好.

快进几周,现在大约有10个不同的Apple和Orange之间的java文件.再说......没什么大不了的.易于操作.在src/Apple和中分隔java文件src/Orange.

快进到今天.我需要稍微修改一下,因为我希望每个都有免费的高级版本.免费版和高级版仅因URL而异.我打算简单地创建一个名为的新类型:

  1. AppleFree
  2. ApplePremium
  3. OrangeFree
  4. OrangePremium

我有一个困境.从现在起src/Apple,src/Orange有10个不同的文件已被更改...如果我更改任何java文件,AppleFree我必须确保我做同样的事情ApplePremium.我有点处于十字路口,希望我的问题在这一点上有意义.我提出了三种可能的解决方案,但我不确定如何实现它们/什么是正确的方法/解决方案不是我想要的.

解决方案1:

使用if语句 if (BuildConfig.FLAVOR==appleFree) {//use free Url} else {// use premium url}

问题:两个Urls在技术上都编译成了apk.我不想要这个.

解决方案2:

让src/AppleFree和src/ApplePremium以某种方式从src/Apple父目录继承.

问题:不知道我会怎么做.

解决方案3:

在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

17
推荐指数
1
解决办法
5856
查看次数

基于应用程序变体的构建配置(BuildType + Flavor)

我正在尝试为应用程序变体设置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。我该如何设置?

尝试过:

  • 如果我在buildType中设置它,那么将只有3个不同的signingConfigs
  • 如果我将其设置为风味,那么将只有 2 个不同的签名配置
  • 如果我尝试将其设置为applicationVariants.all{},则没有 setter 函数,只有 Variant 对象上的 getter (链接
  • 设置字段 on(variant.mergedFlavor as DefaultProductFlavor)不会将 buildConfigField 值添加到 BuildConfig.java (链接

android gradle kotlin gradle-kotlin-dsl

9
推荐指数
1
解决办法
3876
查看次数

解析每种构建类型的应用程序标签

我想为每种构建类型和风格解析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'后缀来调试产品口味?

谢谢你的帮助

java groovy android gradle

4
推荐指数
1
解决办法
1973
查看次数

如何在build.gradle中更改.java文件中的某些值?

我的情况是我有多种口味的应用程序.对于前者 开发,舞台,生产口味.

因此,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中的这一行?

java android gradle build.gradle android-gradle-plugin

3
推荐指数
2
解决办法
4035
查看次数