I am trying to swap some resources in the res/raw
folder and the jniLibs/armeabi
folder based on whether its a release buildType
or a
some of them mention that you just need separate folders based on build variant and some mention about having to use sourceSet?
Gradle/Gradle for Android has an expected structure for a sourceset:
res/
java/
jniLibs/
assets/
Where the sourceSets
closure comes into play is if, for a given sourceset, you want a different structure:
foo/
bar/
ickyNativeStuff/
assetsBecauseThatSeemsLikeADecentName/
Each build type, product flavor, and build variant can have a separate sourceset (as can androidTest
for instrumentation testing), to go along with main
. They are named the same as the build type/product flavor/build variant. These will be in the stock structure, unless you use sourceSets
to change things.
So, to roll all the way back to:
I am trying to swap some resources in the res/raw folder and the jniLibs/armeabi folder based on whether its a release buildType or a debug buildType
In the case of resources, other sourcesets overlay main
. So, if you have src/main/res/...
and src/main/debug/...
and src/main/release/...
, and you are doing a debug
build, whatever is in src/main/release/...
is ignored (as we aren't doing release
) and whatever is in src/main/res/...
and src/main/debug/...
will be used. If there is the same resource in both (src/main/res/raw/boom.ogg
and src/debug/res/raw/boom.ogg
), the debug
one trumps the main
one.
I have not experimented with varying jniLibs/
by build variant. My guess is that it will behave more like Java code, where you cannot have conflicts between what is in a build variant's sourceset and what is in main
, but that's just a guess. So, you can have the debug version of your compiled JNI code in src/debug/jniLibs/
and the release version of your compiled JNI code in src/release/jniLibs/
. Only have in src/main/jniLibs/
any libraries that are not varying. That being said, as I mentioned, I haven't tried this, and so there may be hiccups here.
So, I would expect you to not have a sourcesets
closure in build.gradle
, and to just use the stock sourcesets structure, for your various bits:
src/
main/
...
debug/
jniLibs/
res/
raw/
release
jniLibs/
res/
raw/