我正在尝试根据它是否是 release buildType 交换 res/raw 文件夹和 jniLibs/armeabi 文件夹中的一些资源或 debug buildType。我目前也有两种产品口味。
build.gradle 文件:
apply plugin: 'com.android.application'
android {
dexOptions {
preDexLibraries = false
}
compileSdkVersion 21
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 17
targetSdkVersion 22
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
productFlavors{
phone{
applicationId "com.example.testPhone"
}
tablet{
applicationId "com.example.testTablet"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets{
release{
res.srcDirs = ['androidRelease/res/raw']
}
}
}
dependencies {
compile project(':facebook')
}
使用 sourceSet 是正确的方法吗?如果是,应该创建什么文件夹,以便它仅根据 buildType 交换适当的资源,而不考虑 productFlavors?
编辑:是否可以交换 jniLibs 和 raw 文件夹资源?
文件夹结构:
src/main/jniLibs/armeabi
phoneRelease/jniLibs/armeabi
tabletRelease/jniLibs/armeabi
文件夹结构是否正确?
编辑 2: 根据 Xavier 的回答,gradle 应该是这样的:
android {
sourcesets {
phone {
jniLibs.srcDirs = ['phoneRelease/jniLibs/']
res.srcDirs = ['androidRelease/res/raw']
}
tablet {
jniLibs.srcDirs = ['tabletRelease/jniLibs/']
res.srcDirs = ['androidRelease/res/raw']
}
}
}
我一直在阅读很多相互矛盾的答案,其中一些提到您只需要基于构建变体的单独文件夹,还有一些提到必须使用 sourceSet?
谢谢!
最佳答案
some of them mention that you just need separate folders based on build variant and some mention about having to use sourceSet?
Android 版 Gradle/Gradle 具有预期的源集结构:
res/java/ 中的 Java 源代码树jniLibs/ 中的预编译 JNI 库assets/ 中的 Assets sourceSets 闭包发挥作用的地方是,对于给定的源集,您想要一个不同的结构:
foo/bar/ 中的 Java 源代码树ickyNativeStuff/ 中的预编译 JNI 库assetsBecauseThatSeemsLikeADecentName/ 中的 Assets 每个构建类型、产品风格和构建变体都可以有一个单独的源集(androidTest 也可以用于仪器测试),与 main 一起使用。它们的命名与构建类型/产品风格/构建变体相同。这些将在库存结构中,除非您使用 sourceSets 进行更改。
所以,一路回滚到:
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
在资源的情况下,其他源集覆盖 main。所以,如果你有 src/main/res/... 和 src/main/debug/... 和 src/main/release/.. .,并且您正在执行 debug 构建,src/main/release/... 中的任何内容都将被忽略(因为我们没有执行 release) 以及 src/main/res/... 和 src/main/debug/... 中的任何内容都将被使用。如果 (src/main/res/raw/boom.ogg 和 src/debug/res/raw/boom.ogg) 中有相同的资源,则 debug 一个胜过 main 一个。
我还没有尝试通过构建变体来改变 jniLibs/。我的猜测是它的行为更像 Java 代码,其中构建变体的源集中的内容和 main 中的内容不会有冲突,但这只是一个猜测。因此,您可以在 src/debug/jniLibs/ 中获得已编译 JNI 代码的调试版本,在 src/release/jniLibs/ 中获得已编译 JNI 代码的发布版本.仅在 src/main/jniLibs/ 中有任何不变的库。话虽这么说,正如我提到的,我还没有尝试过这个,所以这里可能会有问题。
所以,我希望您在 build.gradle 中没有 sourcesets 闭包,而只使用 stock sourcesets 结构,用于您的各种位:
src/
main/
...
debug/
jniLibs/
res/
raw/
release
jniLibs/
res/
raw/
关于android - Gradle 根据构建风格交换 jniLibs 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687547/
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa
查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity