一种产品口味的不同本机库

Different native library for one of the product flavors

我的项目有几种产品风味,它们都共享同一个原生库,除了一个使用略有不同但名称相同的库。

认为这是 build.gradle:

android {
    ...
    productFlavors {
        p0 {
        ....
        }
        p1 {
        ....
        }
        p2 {
        ....
        }
        p3 {
        ....
        }
        p4 {
        ....
        }
        p5 {
        ....
        }
    }
}

这是文件夹结构:

src
...main
......jnilibs
.........armeabi-v7a
............lib1.so
...p5
......jnilibs
.........armeabi-v7a
............lib1.so

当我编译 p5 风格时,它抱怨 lib1.so 是重复的(错误:APK 打包期间的重复文件)并且它存在于多个源中。它建议排除这个文件,虽然我不想排除但添加建议的代码不会改变任何东西。我知道我可以为其他每种口味创建不同的文件夹,并在它们的每个 jniLib 中放置相同的 lib1.so,但这确实不是一个选项。

对于那些想要完成同样事情的人,到目前为止我发现最好的办法是更改共享同一个库的包源集的根目录。

build.gradle 会是这样的:

android {
    ...
    productFlavors {
        p0 {
        ....
        }
        p1 {
        ....
        }
        p2 {
        ....
        }
        p3 {
        ....
        }
        p4 {
        ....
        }
        p5 {
        ....
        }
    }
    sourceSets {
        p0.setRoot("src/p")
        p1.setRoot("src/p")
        p2.setRoot("src/p")
        p3.setRoot("src/p")
        p4.setRoot("src/p")
    }
}

文件夹结构:

src
...main
...p
......jnilibs
.........armeabi-v7a
............lib1.so
...p5
......jnilibs
.........armeabi-v7a
............lib1.so