自定义构建Android应用程序从命令行



我试图用一些命令制作批处理文件,所以一旦它运行,它会改变文件中的一些字符串,构建项目并生成APK签名。我需要改变的字符串是:-包名(com.company.project)-一些图像(如图标,启动画面,…)-从应用程序中指定的一些不相关的字符串。

对于最后2件事,我知道如何做到这一点,但对于包名,我觉得只是找到并替换应用程序根文件夹(包括子目录)中该字符串的所有出现是有问题的。

ant有什么方法或命令可以做到这一点吗?

我还遇到了一个问题,而运行命令ant release。我找到根文件夹,运行命令,结果出错了。所以我不得不去eclipse,清理项目并让它自动构建(没有生成APK,因为当你试图在设备上运行它时它会这样做),所以在那一点上,我的bin文件夹只包含文件夹:classes, dexedLibs, res和Manifest.xml文件。

然后我可以进入CL并运行ant release。有没有办法从CL中完成这些呢?像清洁和构建这样的东西,所以我可以在没有问题的情况下运行ant release命令?

注意:对于find and replace,我使用名为FNR的.exe来完成这项工作

编辑:

我现在使用gradle,可以通过更改包名来构建,但在构建中还有一些事情我想做。Gradle文件不能使它工作

这是build.gradle:

task("hello"){
  println "Hello world!!"
}
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}
apply plugin: 'android'
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"
        productFlavors {
        flavor1 {
            packageName "com.testCompany.testProject"
        }
    }
    signingConfigs {
          release {
              storeFile file("keystore/android.keystore")
              storePassword 'blah blah'
              keyAlias "blah blah"
              keyPassword 'blah blah blah'
         }
     }
     buildTypes {
        flavor1 {
            zipAlign true
            sourceSets {
                main {
            signingConfig signingConfigs.release
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }
    }
}

我很确定我做错了。所以我想:—修改res/strings.xml文件中的部分字符串。-更改res/drawable....中的图标/png文件自定义文件夹

我完全不知道该怎么做。我试着:
buildTypes{
    flavor1{
        copy{
            from('src/res/'){
             include '**/*.xml'
             filter{String line -> line.replaceAll(string_to_be_replaced, replaced_string)}
            }
            into '$buildDir/res'
        }
    }
} 

但没有

我需要更改的字符串是:-包名(com.company.project)

如果您要根据这是调试构建还是发布构建来更改这些内容,您可以在构建类型的包名称上指定后缀:

android {
    buildTypes {
        debug {
            packageNameSuffix ".debug"
        }
    }
}

或者,如果您要更改这些内容为其他内容,您可以创建产品口味并替换每种口味的包装名称:

android {
    productFlavors {
        flavor1 {
            packageName "com.example.flavor1"
        }
        flavor2 {
            packageName "com.example.flavor2"
        }
    }
}
  • 一些图像(如图标,闪屏,…)-一些与应用程序特定的无关字符串。

您可以为构建类型(例如,src/debug/)或产品风格(例如,src/flavor1/)创建源集,并在其中拥有资源的替换版本。这将处理您的图像,以及您的"无关字符串",如果您将其定义为字符串资源。

源集也可以包含Java代码,尽管这会变得越来越复杂,因此我建议您使用字符串资源和替换资源。

相关内容

  • 没有找到相关文章

最新更新