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

时间:2014-05-16 16:03:52

标签: android ant command-line build apk

我尝试使用某些命令制作批处理文件,因此一旦运行,它将更改文件中的某些字符串,构建项目并生成APK签名。 我需要改变的字符串是: - 包名称(com.company.project) - 一些图像(如图标,闪屏......) - 从应用程序中特定的一些不相关的字符串。

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

ant有没有办法或命令执行此操作?

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

然后我可以去CL并运行ant release。 所以有没有办法从CL做到这一切?像clean和build之类的东西,所以我可以在没有问题的情况下运行ant release命令?

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

修改 我现在正在使用gradle并且可以构建更改包名称,但是我仍然需要在build.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 ....文件夹中的icon / png文件以获取自定义文件。

我完全不知道该怎么做。我试过了:

buildTypes{
    flavor1{
        copy{
            from('src/res/'){
             include '**/*.xml'
             filter{String line -> line.replaceAll(string_to_be_replaced, replaced_string)}
            }
            into '$buildDir/res'
        }
    }
} 

但没有

1 个答案:

答案 0 :(得分:2)

  

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

如果要根据这是调试版本还是发布版本来更改这些内容,可以specify a suffix on the package name for a build type

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

或者,如果您要更改其他内容,可以create product flavors and replace the package name per flavor

android {
    productFlavors {
        flavor1 {
            packageName "com.example.flavor1"
        }

        flavor2 {
            packageName "com.example.flavor2"
        }
    }
}
  
      
  • 一些图片(如图标,启动画面,......) - 一些与应用程序不同的无关字符串。
  •   

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

源集也可以有Java代码,虽然这会逐渐变得更复杂,所以我建议您使用字符串资源和替换资源。