【问题标题】:Assembly in android gradle experimental在 android gradle 实验中组装
【发布时间】:2016-08-01 14:20:55
【问题描述】:

有没有办法将汇编代码包含到android studio中的本机库模块中。

既然post 说你只能在 srcDir 中包含 *.C、*.CPP、*.c++、*.cc、*.cp、*.cpp、*.cxx 文件,我想知道是否有也许是另一种解决方案或解决方法,至少可以使用本机库对其进行编译。

我想我可以预编译汇编代码,然后将它链接到我的本机模块,但是这样我会遇到一个问题,即我必须在每次更改时重新构建它,然后重新构建项目本身,这并不是一个很好的选择工作流程,所以如果您有更好的方法,请告诉我。

【问题讨论】:

  • 等等,它不运行 make 来构建它?哦,好吧......(不期待在 gradle 下迁移我的 NDK 项目......因为我大量使用 Makefiles+ndk-build 来定义构建期间所需的一切和​​构建步骤)。难道没有一些简单的方法可以在 gradle 中编写运行 make 的自定义构建步骤吗? (我的意思是,它很时髦,所以它应该是可编程的?但我从来没有真正理解它,实际上整个 gradle 让我非常恼火,无论是通过它的性能还是构建过程定义的神秘方式。我一直在完全放弃它并编写 GNU make 规则的边缘。)
  • 因为你提到了它,我想我在某处读到你可以使用自定义 makefile 在 android studio 中构建它,我一定会看看它。
  • ndk-build 本身确实使用 make,所以我不使用任何自定义设置来运行 make,我只是将自定义规则放入 NDK 示例中的那些常见 Makefile(并使用 ndk-build来自 NDK 的脚本来构建它)。可能有从 gradle 运行 ndk-build 的方法(因为您可能可以将任何内容编码到 gradle 中),但我还没有这样做。

标签: android android-studio assembly android-ndk android-gradle-plugin


【解决方案1】:

首先在jni文件夹内创建include文件夹,在同一文件夹内创建libs文件夹。您还可以在libs 文件夹中为不同的chipsets(armeabi、mips、x86)创建不同的文件夹。

将您的 .h 文件复制到 include 文件夹中,并将您的编译文件 (.a) 复制到您的 libs 文件夹中

然后你必须更改你的 build.gradle,在 model 内添加一个新的 repository

repositories {
    libs(PrebuiltLibraries) {
        libYourCLibrary{
            headers.srcDir "src/main/jni/include"
            binaries.withType(StaticLibraryBinary) {
                staticLibraryFile = file("src/main/jni/libs/${targetPlatform.getName()}/YOUR_C_LIBRARY.a")
            }
        }
    }
}

model 中添加此repository 的依赖项

android.sources {
    main {
        jni {
            dependencies {
                library "libYourCLibrary" linkage "static"
            }
        }
    }
}

最后将项目与 gradles 文件同步。

【讨论】:

  • 我知道如何包含一个预构建的库,但我真的不想预构建我的汇编代码,因为我只想告诉 android studio 构建它并等到它完成而不是手动编译它每次更改。
  • 据我所知,目前还不可能以这种方式进行。我能想象的唯一方法是使用 ant 和 gradle 来构建你的 c lib,将 libs 复制为静态然后运行 ​​gradle,也许这个链接可能有用ant-contrib.sourceforge.net/cpptasksdocs.gradle.org/current/userguide/ant.html
  • 这比手动构建要好,但它并不是一个理想的解决方案,但感谢您提供的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多