다른 gradle buildType에 대해 다른 Android 앱 아이콘을 제공하는 방법은 무엇입니까?


103

내 Gradle을 파일에 설정이 개 빌드 유형이 : debugrelease. debug빌드 유형에 대해 다른 앱 아이콘을 설정하고 싶습니다 . 제품 맛에 들어 가지 않고 빌드 유형을 통해서만이 작업을 수행 할 수 있습니까? build.gradle 파일은 다음과 같습니다.

apply plugin: 'android'

//...

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 30
        versionName "2.0"
    }
    buildTypes {
        debug {
            packageNameSuffix '.debug'
            versionNameSuffix '-SNAPSHOT'
        }
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}


답변:


160

그것을 알아 냈습니다. 해야 할 일은 debug다른 아이콘을 포함 하는 별도의 src 폴더를 만드는 것입니다 . 예를 들어 프로젝트 레이아웃이 다음과 같고 런처 아이콘이 호출 된 경우 ic_launcher.png:

[Project Root]
  -[Module]
    -src
      -main
        -res
          -drawable-*
            -ic_launcher.png

그런 다음 디버그 빌드 유형에 대한 별도의 아이콘을 추가하려면 다음을 추가합니다.

[Project Root]
  -[Module]
    -src
      -main
        -res
          -drawable-*
            -ic_launcher.png
      -debug
        -res
          -drawable-*
            -ic_launcher.png

그런 다음 디버그 빌드 유형으로 빌드 할 때 디버그 폴더에있는 ic_launcher를 사용합니다.


sourceSets 선언으로 추가 디버그 폴더를 지정할 필요가 없습니까?
ncoronges 2014

1
@ncoronges 나는하지 않았다. 디버그는 기본 제공 빌드 유형이므로 소스 세트도 기본 제공됩니다.
InsanityOnABun 2014

1
@Scott 각 드로어 블 폴더에 아이콘을 넣으면 '디버그'를 사용하여 작동합니다. 예를 들어 drawable-mdpi, drawable-hdpi 등. 디버그 폴더에있는 다른 리소스 나 코드가 필요하지 않습니다.
roarster

3
매력처럼 작동합니다. 그냥 디버그 폴더에있는 모든 밉맵 디렉토리를 복사했다
아 미트 반 다리를

1
다른 앱 이름을 갖는 방법은 무엇입니까?
DKV

94

이것은 중요한 단점이 있지만 편리한 접근 방식입니다. 두 런처가 모두 APK에 포함됩니다. Bartek Lipinski

더 나은 방법 : InsanityOnABun의 답변

AndroidManifest.xml

<manifest 

    ...
        <application
        android:allowBackup="true"
        android:icon="${appIcon}"
        android:roundIcon="${appIconRound}"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

    ...

    </application>

</manifest>

build.gradle

android {

    ...
        productFlavors{
        Test{
            versionName "$defaultConfig.versionName" + ".test"
            resValue "string", "app_name", "App-Test"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher_test",
                    appIconRound: "@mipmap/ic_launcher_test_round"
            ]
        }

        Product{
            resValue "string", "app_name", "App"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher",
                    appIconRound: "@mipmap/ic_launcher_round"
            ]
        }
    }
}

Github URL : Gradle로 다중 버전 앱 빌드


1
이것은 중요한 단점이 있지만 편리한 접근 방식입니다. 두 런처가 모두 APK에 포함됩니다.
Bartek Lipinski

-_- # 그것은 문제입니다, 나는 그것을 업데이트합니다. 더 나은 방법 :-> stackoverflow.com/a/22876224/703225
qinmiao

2
왜 중요한 단점입니까? 그것은 나에게 너무 중요한 보이지 않는다, 그것은 좋은 깨끗한 Gradle을 솔루션입니다
luky

2
나는 두 번째 @luky의 질문입니다. 왜 이것이 단점입니까? 추가 최상위 디렉터리를 추가하는 것은 매니페스트 자리 표시자를 사용하는 것보다 덜 깔끔하다고 생각합니다. 특히 해당 디렉토리에 단일 아이콘 만 포함 된 경우.
GregSantulli

이 방법을 사용하고 프로덕션 APK에 두 아이콘을 모두 추가하지 않으 manifestPlaceholders려면 실행 단계에서만 또는 뒤에 and if문을 설정할 수 있습니다 . 두 개의 다른 아이콘을 가질 수있는 비 프로덕션 빌드 유형이 1 개 있기 때문에이 작업을 수행하고 있습니다 (다른 아이콘과 단 하나의 차이 만있는 전체 빌드 유형을 원하지 않음).
Nahuel Barrios

12

제품 버전의 부분 AndroidManifest.xml 파일에서도 아이콘을 지정할 수 있습니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
    <application
        tools:replace="android:icon"
        android:icon="@drawable/alternative_icon" />
</manifest>

원본 AndroidManifest.xml에 지정한 아이콘을 덮어 씁니다.


4
질문을 확인하십시오. " 제품 맛을 보지 않고 빌드 유형을 통해서만이 작업을 수행 할 수있는 방법이 있습니까?"
InsanityOnABun 2015 년

4
요청한대로는 아니지만 많은 도움이되었습니다! ~ 맛 ~ 사용
악 SE하지 말라 - 실패하다을

2
이를 수행하는 가장 좋은 방법은 플레이버 특정 매니페스트 파일이 이미있는 경우입니다.
Zax

이것은 당신이 실행 아이콘 .. 대의 10 + 버전을 가진 고유 한 이름을 유지할 수있는 내가 지금까지 본 적이있는 유일한 솔루션 ic_launcher.png중 하나 인 알 필요 단지가 위치하거나 실제로 그것을 여는 곳으로있는 (그리 좋은). 나는 매니페스트 파일대한 이런 종류의 확장 이 가능하다는 것을 몰랐고 , 여기에서 다른 곳이나 다른 곳에서 언급 한 것을 보지 못했습니다. 확실히 우아한
진 보

6

다음과 같이 여러 차원으로 다른 풍미를 사용하면서 다른 아이콘을 가져 오는 경우 :

flavorDimensions "color", "size"
productFlavors {
    black {
        dimension "color"
    }
    white {
        dimension "color"
    }

    big {
        dimension "size"
    }
    small {
        dimension "size"
    }
}

이것은 다음과 같이 달성 될 수 있습니다.

먼저 디버그 리소스를 다음과 같은 별도의 폴더에 저장합니다.

src/blackDebug/res
src/whiteDebug/res

둘째, 여러 플레이버 차원이있는 키를 넣으려면 이러한 차원 중 일부가 아이콘에 영향을주지 않더라도 소스 세트 이름에 가능한 모든 플레이버 조합이 포함되어야합니다.

sourceSets {
    // Override the icons in debug mode
    blackBigDebug.res.srcDir 'src/blackDebug/res'
    blackSmallDebug.res.srcDir 'src/blackDebug/res'
    whiteBigDebug.res.srcDir 'src/whiteDebug/res'
    whiteSamllDebug.res.srcDir 'src/whiteDebug/res'
}

명확히하기 위해 여러 차원이 사용중인 경우 다음 은 작동하지 않습니다 .

sourceSets {
    // Override the icons in debug mode
    blackDebug.res.srcDir 'src/blackDebug/res'
    whiteDebug.res.srcDir 'src/whiteDebug/res'
}

실행 아이콘이 매니페스트 파일에 선언되어 있기 때문에 이것이 어떻게 도움이 될지 모르겠습니다. 그 문제를 해결할 수 있습니까?
David Rector

3
리소스 이름은 매니페스트에 선언되어 있지만 내 게시물에 설명 된대로 다른 버전 별 폴더에 동일한 파일 이름을 가진 다른 아이콘을 가질 수 있습니다.
Jose Gómez

0

mipmap-anydpi-v26 교체 및 모든 차원에 대한 파일 유지를 포함한 단계별 솔루션 :

먼저 build.gradle (Module : app)에서 Android-> buildTypes-> debug, internal 등의 빌드 유형을 정의하십시오.

프로젝트 계층 구조에서 Android 아래에서 앱-> 새로 만들기-> 이미지 자산-> 경로에서 아이콘 선택-> 배경 레이어 및 레거시의 다른 변경 사항-> 다음-> Res 디렉토리에서 원하는 빌드 유형을 선택합니다 ( 디버그, 내부, 기본 등)-> 완료

이렇게하면 아이콘이 기존의 모든 아이콘을 대체합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.