android - 将 Native Module 从 Gradle Experimental Plugin 迁移到 Stable Gradle

标签 android android-studio gradle cmake gradle-experimental

我有一个 Android 库项目,它通过 Android NDK 包含在 C/C++ 中的一部分.
项目开始于半年前,所以我们选择使用Experimental Plugin因为更好的 NDK 支持。
我正在使用 gradle-experimental:0.8.2现在。我有一个 com.android.model.native模块,我想将它迁移到 gradle:2.2.0 .我在 Gradle Android Plugin DSL 中看到的唯一选项是:

  • AppExtension:com.android.application 的安卓扩展项目。
  • LibraryExtension:com.android.library 的 android 扩展项目。
  • TestExtension: com.android.test 的安卓扩展项目。

  • 所以问题是如何用稳定的 gradle 插件在 gradle 中制作一个纯原生模块?

    这是我当前的 native 模块:
    apply plugin: 'com.android.model.native'
    
    apply from: "../config.gradle"
    def config = ext.configuration
    
    model {
        android {
            compileSdkVersion = config.compileSdkVersion
            buildToolsVersion = config.buildToolsVersion
    
            defaultConfig {
                minSdkVersion.apiLevel = config.minimumSdkVersion
                targetSdkVersion.apiLevel = config.targetSdkVersion
                versionCode = 1
                versionName = '1.0'
            }
            ndk {
                moduleName = 'apicore'
                platformVersion = config.minimumSdkVersion
                cppFlags.add("-std=c++11")
                cppFlags.add("-pthread")
                cppFlags.add("-fexceptions")
                cppFlags.add("-frtti")
                stl = "gnustl_static"
                abiFilters.addAll(config.targetPlatforms)
                ldLibs.addAll(['android', 'log'])
            }
            sources {
                main {
                    jni {
                        source {
                            //include "someFile.txt"
                            // This is ignored.
                            exclude "main.cpp"
                            exclude "misc/APITest.cpp"
                            exclude "misc/APITest.h"
                        }
                    }
                }
            }
            buildTypes {
                release {
                    minifyEnabled false
                    proguardFiles.add(file('proguard-android.txt'))
                }
            }
        }
    }
    

    最佳答案

    如果您想迁移到稳定的 gradle 插件,您将需要创建 CMakeLists.txt 或 Android.mk 来构建您的“ libapicore.so ”。
    我认为您应该执行以下步骤:

  • 为了便于迁移,请将您的 .h、.c、.cpp 移动到root_folder_of_project\app\src\main\cpp
  • 也可以添加 CMakeLists.txt .它应该看起来像:
    cmake_minimum_required(VERSION 3.4.1)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") add_library(apicore SHARED #here add your cpp sources mysource1.cpp mysource2.cpp #do not include main.cpp misc/APITest.cpp misc/APITest.h ) #include libraries needed for apicore lib target_link_libraries(apicore android log )
  • 现在重写您的应用程序的 build.gradle 并将其指向 CMakeLists.txt:apply plugin: 'com.android.application'android {compileSdkVersion = 25 buildToolsVersion = '25.0.2'defaultConfig { applicationId = 'com.your.app' minSdkVersion 16 targetSdkVersion 25 ndk { abifilters 'armeabi-v7a' /*,'armeabi', etc.*/ } externalNativeBuild { cmake { arguments '-DANDROID_PLATFORM=android-19', '-DANDROID_TOOLCHAIN=clang', /*or gcc*/ '-DANDROID_CPP_FEATURES=rtti', '-DANDROID_CPP_FEATURES=exceptions', '-DANDROID_STL=gnustl_static' /*CMake uses by default*/ } } }buildTypes {...}externalNativeBuild { cmake { path 'src/main/cpp/CMakeLists.txt' } }}dependencies {...}有了这个,您将使用您的 native 构建您的 android 应用程序。 “libapicore.so”里面。
  • 关于android - 将 Native Module 从 Gradle Experimental Plugin 迁移到 Stable Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40909370/

    相关文章:

    java - OnClickListener 不显示我的函数的输出

    Android 支持库 appcompat v7 : cannot find actionModeShareDrawable resource

    android - 错误 : Program type already present: android. support.v4.app

    java - 为什么我的Java程序中的好友列表不显示?

    android - 产品口味本地化

    java - Gradle:路径和 baseDir 都不能为 null 或空字符串

    java - Auth0 的通用身份验证不允许注销

    android - 除非正在播放音频,否则不会收到 KeyEvent.KEYCODE_MEDIA_NEXT

    在 Gradle 构建完成之前显示 Android Studio 的设备选择器

    java - 一些输入文件使用或覆盖了已弃用的 API Flutter build android