2014-05-16 2 views
1

일부 명령으로 배치 파일을 만들려고하므로 일단 실행되면 파일의 일부 문자열이 변경되고 프로젝트가 빌드되며 APK가 생성됩니다. 변경해야하는 문자열은 다음과 같습니다. - 패키지 이름 (com.company.project) - 일부 이미지 (아이콘, 스플래시 화면 등) - 앱과 관련없는 일부 관련없는 문자열.명령 줄에서 사용자 정의 빌드 Android 앱

나는 그것을하는 방법을 안다. 그러나 패키지 이름에 대해, 그 응용 프로그램의 루트 폴더 (하위 디렉토리 포함)에서 해당 문자열의 모든 항목을 찾아서 바꾸는 것에 대해 잘못된 생각이 들었다.

ant이이 작업을 수행하는 방법이나 명령이 있습니까?

또한 ant release 명령을 실행하는 동안 문제가 발생했습니다. 루트 폴더로 이동하여 명령을 실행하면 오류가 발생합니다. 그래서 이클립스에 가야했고, 프로젝트를 청소해야했고, 자동 백업을 할 수있게 만들었어야했다. (APK가 생성되지 않았기 때문에 장치에서 실행하려고했기 때문에) 그 시점에서 내 bin 폴더에는 폴더, 클래스, dexedLibs, res 및 Manifest.xml 파일이 있습니다.

그런 다음 CL에 가서 ant release을 실행할 수 있습니다. CL에서이 모든 작업을 수행 할 수있는 방법이 있습니까? 뭔가 깨끗한와 빌드처럼 난 ant release 명령을 아무 문제없이 실행할 수 있습니까?

참고 : find and replace 내가이 일을 FNR라는이 .exe를 사용

편집 : 나는 지금 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'] 
       } 
      } 
     } 

    } 
} 

:

은 build.gradle입니다. 그래서 다음을 원합니다 : - 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 스크립트를 작성해야하는 사람은 아무도 없습니다. Android 용 Gradle로 이동하십시오. 이 기능은 앞으로 지원되는 명령 줄 빌드 시스템 일뿐만 아니라 제품의 맛을 통해 원하는 모든 것을 처리합니다. – 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에 절대로 존재하지 않습니다. 안드로이드 1.0 이후와 모든 빌드 시스템에서 그랬다. 'classes.dex'는 자바 소스의 DEX 바이트 코드를 포함합니다. – CommonsWare

관련 문제