Как использовать другой набор ресурсов (изображения, темы и т. Д.) При сборке в Android Studio? - PullRequest
0 голосов
/ 14 мая 2019

Нам нужно создавать разные приложения для разных клиентов из одной исходной базы. Приложение для каждого клиента должно быть фирменным - то есть иметь разные изображения, цвета и т. Д. Большинство ресурсов - например, макеты, строки - будут доступны всем клиентам.
Мы думаем об использовании sourceSet в build.gradle. Например:

android {
...
    sourceSets {
        Main {
            // resources common to all clients
            resSrcDirs = 'res'
            // resources specific to client1
            resSrcDirs += 'client1/res' 
            // resources specific to client2
            //resSrcDirs += 'client2/res'
            ...

            // The same approach taken for manifest that contains application theme
            manifestSrcFile=client1/AndroidMainifest.xml
            // manifestSrcFile=client2/AndroidManifiest.xml
            ...
        }
    }
}

Перед каждой сборкой мы раскомментируем / закомментируем выделенные строки в build.gradle.

Мы думаем, что это будет работать, но задаемся вопросом, есть ли лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Вы можете использовать flavourDimensions,

android {
    flavorDimensions "version"

    productFlavors {
        commom
        client1
        client2
    }
}

, а затем создать папку ресурсов src / client1 & src / client2.В окне Build Variants вы можете выбрать, какой стиль запускать или отлаживать. См. Рисунок ниже.Если вы выбрали client1Debug или client1Release, ресурсы в client1 / res будут переопределять ресурсы с одинаковыми именами в main / res.

enter image description here

1 голос
/ 14 мая 2019

Ваш подход правильный, разделите набор источников по бренду клиента.

У нас был такой же опыт, и мы решили его следующим образом:

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
        jniLibs.srcDirs = ['jniLibs']
    }

    brandA {
        java.srcDirs = ['src_a']
        res.srcDirs = ['res_a']
        assets.srcDirs = ['assets_a']
    }

    brandB {
        java.srcDirs = ['src_b']
        res.srcDirs = ['res_b']
        assets.srcDirs = ['assets_b']
    }

    brandC {
        java.srcDirs = ['src_c']
        res.srcDirs = ['res_c']
        assets.srcDirs = ['assets_c']
    }
}
...