2014-05-16 73 views
1

我试图用一些命令创建一个批处理文件,因此一旦它运行,它将更改文件中的一些字符串,构建项目并生成APK签名。 我需要更改的字符串是: - 程序包名称(com.company.project) - 某些图像(如图标,启动画面,...) - 某些与应用程序无关的无关字符串。从命令行自定义构建Android应用程序

对于最后2件事,我知道该怎么做,但对于软件包名称,我觉得在应用程序的根文件夹(包括子目录)中找到并替换该字符串的所有出现是错误的。

ant对此有任何方法或命令吗?

另外我遇到了一个问题,同时运行命令ant release。 我去了我的根文件夹,运行命令,它会得到错误。 所以我必须去eclipse,清理项目并让它自动构建(没有生成APK,因为它会在你尝试在设备上运行它时这样做),所以在这个时候我的bin文件夹只包含文件夹:classes, dexedLibs,res和Manifest.xml文件。然后我可以去CL并运行ant release。 那么有没有办法从CL做这一切?像干净和构建的东西,所以我可以在没有问题后运行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 ....文件夹中的图标/ png文件以进行自定义。

我完全不知道该怎么做。我想:

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

但没有

+0

此时,没有人应该编写新的自定义Ant脚本。请转到Gradle for Android。这不仅是支持的命令行构建系统的前进,它还通过产品风格处理您正在寻找的所有内容。 – CommonsWare

+0

好吧,现在我有了渐进式,我该如何设置这些值?在build.gradle文件中?怎么样?谢谢 – AAlferez

回答

2

我需要改变的字符串是: - 包名称(com.company。项目)

如果改变了这些事基于这是否是一个调试版本或发布版本,你可以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代码,尽管这会逐渐变得更复杂,所以我建议您使用字符串资源和替换资源。

+0

'gradle build'创建文件,但是当我检查生成的apk时,所有文件都正确,但是我的src文件...甚至都没有! – AAlferez

+0

@ AnnArbor87:Java源代码永远不会在APK中。自从Android 1.0以来,所有构建系统都是如此。 'classes.dex'将包含Java源代码中的DEX字节码。 – CommonsWare

相关问题