Android Studio (gradle) генерирует apk-файл двойного размера для платной версии

Когда я создаю свою платную версию, Android Studio (и Gradle) создает файл apk двойного размера?

Тот же результат генерирует apk из Android Studio и/или командной строки:

gradle clean assembleRelease

Он включает в себя следующие дополнительные каталоги:

assets/
main/
paid/

таким образом делая его очень большим.

Мой build.gradle имеет следующее определение для платной версии:

sourceSets {

    paid {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/paid']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

}

В моем каталоге src/paid/res у меня есть только следующее дополнение (распаковать из apk):

40  ./res/drawable
8   ./res/drawable-hdpi
8   ./res/drawable-ldpi
8   ./res/drawable-mdpi
8   ./res/raw
8   ./res/raw-de
8   ./res/raw-sv
16  ./res/values
8   ./res/values-de
8   ./res/values-sv
120 ./res
120 .

А я использую следующее:

productFlavors {

    free {
        packageName "com.xyz.abc"
    }

    paid {
        packageName "com.xyz.abcpro"
    }

}

Размеры каталогов ниже (распаковать из apk):

Бесплатно:

208 ./META-INF
8   ./org/apache/http/client
8   ./org/apache/http/entity/mime
8   ./org/apache/http/entity
24  ./org/apache/http
24  ./org/apache
24  ./org
888 ./res/drawable
584 ./res/drawable-hdpi
552 ./res/drawable-ldpi
560 ./res/drawable-mdpi
16  ./res/drawable-xhdpi
16  ./res/drawable-xxhdpi
488 ./res/layout
32  ./res/layout-land
8   ./res/layout-v10
16  ./res/layout-v17
8   ./res/layout-v7
8   ./res/layout-v8
64  ./res/menu
16  ./res/raw
16  ./res/raw-de
16  ./res/raw-sv
80  ./res/xml
3368    ./res
8448    .

Оплаченный:

8   ./assets/scripts
8   ./assets
1000    ./main/res/drawable
720 ./main/res/drawable-hdpi
584 ./main/res/drawable-ldpi
656 ./main/res/drawable-mdpi
16  ./main/res/drawable-xhdpi
24  ./main/res/drawable-xxhdpi
504 ./main/res/layout
40  ./main/res/layout-land
8   ./main/res/layout-v10
16  ./main/res/layout-v17 
8   ./main/res/layout-v7
8   ./main/res/layout-v8
64  ./main/res/menu
16  ./main/res/raw
16  ./main/res/raw-de
16  ./main/res/raw-sv
152 ./main/res/values
72  ./main/res/values-de
72  ./main/res/values-sv
96  ./main/res/xml
4088    ./main/res
4104    ./main
368 ./META-INF
8   ./org/apache/http/client
8   ./org/apache/http/entity/mime
8   ./org/apache/http/entity
24  ./org/apache/http
24  ./org/apache
24  ./org
40  ./paid/res/drawable
8   ./paid/res/drawable-hdpi
8   ./paid/res/drawable-ldpi
8   ./paid/res/drawable-mdpi
8   ./paid/res/raw
8   ./paid/res/raw-de
8   ./paid/res/raw-sv
16  ./paid/res/values
8   ./paid/res/values-de
8   ./paid/res/values-sv
120 ./paid/res
120 ./paid
888 ./res/drawable
584 ./res/drawable-hdpi
552 ./res/drawable-ldpi
560 ./res/drawable-mdpi
16  ./res/drawable-xhdpi
16  ./res/drawable-xxhdpi
488 ./res/layout
32  ./res/layout-land
8   ./res/layout-v10
16  ./res/layout-v17
8   ./res/layout-v7
8   ./res/layout-v8
64  ./res/menu
16  ./res/raw
16  ./res/raw-de
16  ./res/raw-sv
80  ./res/xml
3368    ./res
14656   .

Размер бесплатного APK:

-rw-r--r-- 1 административный персонал 952930 6 января 10:01 free-release.apk

Платный размер APK:

-rw-r--r-- 1 админ штат 1880495 6 янв 10:00 платный-релиз.apk

Это стандартная установка Android Studio с main/, а затем параллельно с main/ в следующем платном каталоге/:

.
./res
./res/drawable
./res/drawable/ic_launcher.png
./res/drawable/widget_icon_large.png
./res/drawable/widget_icon_small.png
./res/drawable-hdpi
./res/drawable-hdpi/ic_launcher.png
./res/drawable-ldpi
./res/drawable-ldpi/ic_launcher.png
./res/drawable-mdpi
./res/drawable-mdpi/ic_launcher.png
./res/raw
./res/raw/help.html
./res/raw-de
./res/raw-de/help.html
./res/raw-sv
./res/raw-sv/help.html
./res/values
./res/values/commons.xml
./res/values/strings.xml
./res/values-de
./res/values-de/strings.xml
./res/values-sv
./res/values-sv/strings.xml

Макет студии: введите здесь описание изображения

Обновление1:

Когда я добавил пустой каталог бесплатно параллельно платному и изменил следующее:

sourceSets {

    free {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/free']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    paid {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/paid']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

}

Теперь оба apk имеют одинаковый и двойной размер!?

Обновление2:

Удалил sourceSets все вместе и все заработало!


person powder366    schedule 06.01.2014    source источник
comment
Интересно, у вас есть эксклюзивные ресурсы (например, логотип приложения) в обоих каталогах?   -  person Eugen Martynov    schedule 06.01.2014
comment
strings.xml у меня есть в обоих каталогах, но в платных только конкретные изменения для платных. В необработанном виде одно и то же имя файла в обоих каталогах, но с разным содержимым. В drawable у меня есть то же имя файла для значка запуска, но с другим цветовым оформлением. В остальном все на месте по умолчанию без дублирования для платных.   -  person powder366    schedule 06.01.2014
comment
Вы указали размеры каталогов, но что на самом деле в каталогах, которые не принадлежат, что объясняет разницу в размерах?   -  person Scott Barta    schedule 06.01.2014
comment
Я не уверен, что ваш каталог, названный платным как один из ваших платных каталогов ароматов, и имя productFlavor также платное, создало какую-либо проблему.   -  person pyus13    schedule 07.01.2014
comment
@pyus13 Не могли бы вы объяснить немного больше...   -  person powder366    schedule 07.01.2014
comment
@powder366 на самом деле, что происходит в Gradle, если вы настроите какой-либо вариант во время компиляции, сборка автоматически содержит каталог с тем же именем, например, в вашем случае платный — это аромат, а платный — это также имя каталога. Вы включаете его в исходные наборы как ну, так что я сомневаюсь, что он включает их дважды. Вы пытались сохранить другое имя каталога. Проверьте примечание, написанное в моем ответе здесь android studio gradle"> stackoverflow.com/questions/20890205/   -  person pyus13    schedule 07.01.2014
comment
@ pyus13 Я пытался переименовать каталог с платного на профессиональный. Также затем изменен исходный набор на java.srcDirs = ['src/pro']. Не помогло. Также обычно изменено res.srcDirs = ['src/paid/res'] на res.srcDirs = ['src'] Также, пожалуйста, проверьте мой Update1 для другого теста, который я сделал...   -  person powder366    schedule 07.01.2014


Ответы (1)


Я думаю, что вы неправильно указываете sourceSets.

Если вы вернетесь к исходной конфигурации, бесплатным и платным вариантам продукта, ресурсам в src/paid/res, вы можете удалить элементы sourceSets, и приложение должно нормально собраться.

person Community    schedule 04.03.2014
comment
Я удалил все наборы источников в build.gradle и сохранил структуру src/main/* и src/paid/res (до сих пор технически не уверен, почему мои наборы источников испортили ее) - person powder366; 06.03.2014