问题标签 [gradle-experimental]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2072 浏览

android - 混合来自 gradle 和 gradle-experimental 的 android 插件

是否有任何方法或解决方法或只是提示使 gradle 和 gradle-experimental 的插件一起工作?

例如混合这两个版本:

我有一个使用一些外部插件(app/build.gradle)的现有项目:

在我的根中,build.gradle我有:

我遇到的问题:

或者

如果没有其他插件,我的项目工作正常(我有一些从我的主项目调用的 NDK 代码的 Android 库。当我在任何其他插件上添加提到的插件时会出现问题。

问题是 - 它是每个插件的 gradle-experimental 问题还是问题(hugo、databinding、apt,可能更多)。

或者,如果有任何其他方法可以让应用程序具有当前稳定的 gradle 插件和使用 gradle-experimental 的库(带有 NDK 代码),也许您有任何提示?

我要避免的是处理 *.mk 文件和(尽可能完整)Android Studio 支持。更大的图景是使用 NDK 代码(只是简单的计算)准备 .aar 库,该库将能够插入到现有项目中。

0 投票
1 回答
1413 浏览

android - 实验插件的风味尺寸和变体过滤器?

有谁知道使用实验性 Gradle 插件定义风味维度和变体过滤器的语法?(这将包括为每个风味块内的特定维度分配风味的语法create()。)

实验性插件用户指南没有解决任何问题,我在代码示例中找不到任何示例。我正在使用插件版本 0.2.1 ( com.android.tools.build:gradle-experimental:0.2.1)。常规插件的语法显然根本不起作用。

这是原始脚本,它定义了 Google Play 和 Amazon AppStore 的产品风格:

由于这个应用程序使用本机代码,我想为不同的硬件平台添加一个维度。此外,由于 Amazon AppStore 和 Google Play 有不同的模型来支持不同的硬件,我想使用变体过滤器来针对不同的市场对硬件平台进行不同的处理。

在黑暗中盲目地尝试了很多方法来定义风味维度。这些都会在编译 Gradle 脚本时产生错误。

我还没有尝试创建变体过滤器,因为我被困在第 1 步,但没有“知情人”的指导,我希望同样(缺乏)成功。

尝试1:

错误:

没有这样的属性:flavorDimensions 类:com.android.build.gradle.managed.ProductFlavor

尝试2:

错误:

没有这样的属性:flavorDimensions 类:com.android.build.gradle.managed.AndroidConfig

尝试 3:

错误:

配置项目 ':app' 时出现问题。

以下模型规则是未绑定的: model.android.flavorDimensions
Mutable:
- android.flavorDimensions (java.lang.Object)

尝试4:

错误:

没有这样的属性:flavorDimensions 类:org.gradle.model.dsl.internal.NonTransformedModelDslBacking

0 投票
4 回答
17729 浏览

android-studio - 如何使用 Gradle Experimental Plugin 设置 C/C++ 包含路径?

当我的头文件位于与我的模块的主源文件夹不同的位置时,Android Studio 找不到我的头文件。#include "SDL_config.h" 语句以红色突出显示(其他 #include 语句很好),这一点很明显。

我已经尝试修改下面的 cppFlags 值,但我开始怀疑这些 cppFlags 是否甚至被传递给编译器。

有没有人以这种方式设法包含来自其主要源文件夹以外的文件夹中的文件?

我指定 cppFlags 或 moduleName 甚至源的方式有问题吗?

我可以通过 SDL2 源并将所有 #include 语句修改为相对 #include 路径,但我真的不想修改 SDL2 源。我应该能够以某种方式简单地指定包含路径的列表。

更新:以下是有关我当前项目布局的更多信息:

app/src/main/jni app/src/main/jni/src/Main.cpp <- 这是编译 app/src/main/jni/SDL2 <- 所有 SDL2 源代码都在这里 app/src/main/jni/ GLM <- 所有 GLM 源都在这里

此布局是使用我在此处提供的示例项目的直接结果:https ://gitlab.com/scannerdarkly/hello-sdl-android

该项目将使用命令行中的 ndk-build 构建 - 我想通过在 Android Studio 中构建更进一步。我的项目将尝试在 GLES2 设备上绘制三角形。

到目前为止,这是我当前项目的链接:

http://www.mediafire.com/download/92577p7vf123l72/hello-sdl-android.zip

0 投票
1 回答
528 浏览

android-studio - Android Studio,NDK - 无法运行应用程序

我已经设法(最终)使用 Gradle 实验插件使用 Android Studio 和 NDK 构建了一个测试 SDL2 应用程序。

当我尝试运行该项目时,它不会运行。我收到以下错误:

我的项目可以从这里下载:

有人可以帮我让它运行吗?

这是堆栈跟踪:

这是打开了--debug 和--info 的跟踪的一部分。我看不到这里有重复文件,真的需要一些指导:

0 投票
1 回答
580 浏览

android-studio - 在 Android Studio 模块中使用不同的 gradle 构建工具

我已经为具有许多模块的应用程序实现了新的实验性构建工具(gradle-experimental:0.2.1),但是当前的 api 非常糟糕并且与某些库不兼容。

我很好奇是否可以将所有 ndk 代码拉到一个模块中,只使用实验性构建工具处理 ndk 模块,并为应用程序的其余部分使用官方构建工具。将所有令人头疼的实验性问题分离到一个小模块中会很棒。

我尝试了一些事情,但总是以 gradle 同步错误告终。在网上找不到任何关于这是否可行的信息。

0 投票
1 回答
940 浏览

android-studio - 如何在 Android Studio 中使用新的 gradle 实验

我用 Android Studio NDK 创造了一个非常好的世界。按照http://tools.android.com/tech-docs/new-build-system/gradle-experimental的指示,我复制了完全相同的内容(只留下了一些较新的构建工具版本),但总是出现错误:错误: (49, 1) 评估项目 ':app' 时出现问题。

在项目“:app”上找不到参数 [junit:junit:4.12] 的方法 testCompile()。

你能告诉我我的 HelloWorld 有什么问题吗?这是我的应用程序 build.gradle

和 build.gradle

和 gradle-wrapper.properties

0 投票
1 回答
529 浏览

android - Android gradle 实验性插件路线图

在我们公司我们正在开发一个包含 Java 和原生部分的 Android SDK。我们以 AAR 格式打包 SDK,其中包含所有资源、Java 类和本机位。根据 AAR 规范,本机库应放在 AAR 包内的 jni 文件夹中。由于当前的 gradle 插件不支持高级 NDK 用例,并且由于我们有一个非常成熟的 Android.mk 文件,该文件已经发展了 3 年以上,因此我们通过从 gradle 任务调用自定义 shell 脚本来准备 AAR。此 shell 脚本使用 ndk-build 命令构建 NDK,运行此脚本的任务作为 javaCompile 任务的依赖项放置(我们的代码有多种风格,每种风格都有自己的 NDK 规则,这些规则是从定义文件中预加载的然后作为命令行参数提供给 ndk-build)。

最后,当所有内容都编译完成后,我们有一个 Copy 任务,它将本机库复制到 build/intermediates/bundles 内的 jni 文件夹(最终被压缩到 AAR 中的文件夹)。在我们更新项目以使用 gradle 插件 v1.5.0 之前,这一直正常工作。

在 v1.5.0 中,插件中引入了称为 Transform API 的东西。尽管我们不使用它,但此转换步骤在任务transformNative_libsWithSyncJniLibsForFlavorNameBuildTypeName中对本地库进行了一些转换,这发生在我们已经将库复制到 jni 文件夹并导致删除 jni 文件夹中的所有数据之后的某个地方。这最终导致 AAR 不包含本机库,并在需要本机方法时立即崩溃。

我们通过使用来解决这个问题project.tasks[taskName]来获取该任务并确保它在我们将我们的库复制到 jni 文件夹之前发生。

然而,这个问题已经开始让我们担心 gradle-experimental 插件(目前唯一支持 NDK 的)是否以及何时会退出实验阶段并成为构建 NDK 代码的标准。

我们对该实验性插件进行了一些试验,除了不同的语法(为什么???)它不支持调试本机代码作为库模块的一部分(gdb 文件未打包到 AAR 中,并且 jniDebuggable 标志不再存在)。

有谁知道这个插件什么时候会达到稳定的 API 并准备好在生产版本中使用?我们希望提前计划从 shellscript 调用 ndk-build 到具有相同功能奇偶性的 gradle-only NDK 构建的迁移(加上对 Android Studio 的 C++ 编辑的免费支持,这在当前配置下是不可能的,因此我们依赖不同的编辑器JNI 胶水代码)。

0 投票
2 回答
2271 浏览

c++ - android-studio 中基于 cocos2dx 的项目使用 gradle-experimental 插件

我有一个 gradle-experimental 0.6.0-alpha1 兼容 build.gradle 文件:

我使用 cocos2dx 作为我的引擎。我有一个如下所示的文件夹层次结构:

  • 类(包含我项目的所有 C++ 代码)
  • proj.android/src/main/projectName/jni(包含了 cocos2d 挂接的 main.cpp 文件)

我还有许多其他 cpp 类,它们位于 proj.android 之外的不同文件夹中(例如 cocos2d cpp 文件位于 proj.android/../../../dependencies/XXXX/cocos2d-x 和引擎文件位于 proj.android/../../../dependencies/XXXX/engine,我所有的 C++ 代码都位于 proj.android/../Classes,就像在每个 cocos2dx 项目中一样)

我正在尝试使用最新的 gradle 实验插件 (gradle-experimental-0.6.0-alpha1) 构建我的应用程序。

我首先尝试按原样构建它,项目编译并运行但为空(没有生成 libMyApp.so),因为我没有在我的 gradle 构建中包含任何 C++ 源文件。

然后我创建了一些指向源文件夹的符号链接,以便 gradle 可以选择它们:

现在,当我正在构建(./gradlew assembleDebug)时,我得到它编译符号链接的 C++ 文件,但无论我尝试什么,它每次都在第一次包含标题时失败。

我尝试使用以下方法添加源文件/标头包含,如下所述

但我无法找到丢失的“.h”标题。如果有人尝试使用 cocos2Dx、gradle-experimental 和 android-studio 构建后续的 C++ 项目,请随时分享任何经验。当我能够编译它时,我会尝试编译某种指南(有一天:))

供参考:最新的gradle doc:

https://docs.gradle.org/2.9/userguide/nativeBinaries.html

有用的链接:

http://ph0b.com/new-android-studio-ndk-support/

0 投票
2 回答
2984 浏览

android - 通过 srcDir srcFile 指令 gradle 实验性包含文件目录

有谁知道 srcDir 的包含如何在 gradle 实验文件(cpp 和 h)中工作?这是一个“三重”问题:

1°) srcDir 是如何工作的?

1.a°)它是否递归地包括所有子目录?它是否仅包含深层文件?它们是否包含所有 cpp/c/cc/cxx 文件?

例如这个命令:

它是否包含 src 下的所有 cpp 文件?src 下的所有文件?所有cpp文件递归到子目录?所有文件递归到子目录?

谷歌文档非常模糊:

http://tools.android.com/tech-docs/new-build-system/gradle-experimental

并且 gradle 也不清楚:

https://docs.gradle.org/current/userguide/nativeBinaries.html

它说它只包括 src/${name}/cpp ?这是什么意思?我必须创建一个

文件夹?

1.b°)标题怎么样:

我觉得应用于标头的 srcDir 指令与源的 srcDir 指令的工作方式不同(它仅包括其当前深度的标头)

2°)如果我想要文件和目录之间的混合怎么办?

似乎不起作用

3°)包含/排除指令如何工作?

include/exclude 指令呢,它们只适用于前面的 srcDir 语句吗?还是它们适用于“源”块的所有语句?

正在做:

似乎不包含任何 cpp 文件。我以为它会包括这个文件夹层次结构的所有cpp文件,甚至是src下的所有cpp文件,但看起来它没有。

我想指出我正在使用 gradle 2.9,这是最新的 gradle-experimental-0.6.0-alpha3 插件所必需的。

0 投票
1 回答
378 浏览

android - gradle 实验性 ndk 仅构建目录的子集

我正在为 android studio 使用 gradle2.9 和 gradle-experimental-0.6.0-alpha3 插件,但我遇到了一个似乎无法解决的问题。

这是我的目录结构:

  • 顶级目录
    • 文件A.cpp
    • 目录
      • 文件A1.cpp
      • 文件A2.cpp

我想编译 fileA.cpp, fileA1.cpp 但不是 fileA2.cpp

1°)我尝试使用选择性目录包括:

但我得到 dirA1/fileA1.cpp 不是目录的错误,我找不到包含文件的方法。

2°)我尝试使用选择性目录排除:

但这也不起作用,因为 exclude 等待一个目录。即使使用通配符(如“排除 *A2*”)似乎也不起作用。

有谁知道使用新的 gradle 实验工具来做到这一点的方法(即使它需要一个一个地包含文件)?