簡體   English   中英

Gradle(android實驗插件)忽略項目依賴

[英]Gradle (android experimental plugin) ignores a project dependency

我在以下項目結構中使用Gradle Android Experimental插件:

Root Project
|-- app
|-- my-library

settings.gradle

include ':my-library', ':app'

的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

應用程序/的build.gradle

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.0"

        defaultConfig.with {
            applicationId = "a.bundle.id"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile project(':my-library')
}

我的圖書館/的build.gradle

apply plugin: 'com.android.model.library'

model {
    android {
        compileSdkVersion = 'android-23'
        buildToolsVersion = '23.0.1'

        defaultConfig.with {
            minSdkVersion.apiLevel = 15
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.txt')
        }
    }

    android.ndk {
        moduleName = "xxx"
        CFlags += "-I" + "${project.buildDir}".toString() + "/../src/main/jni/libabecs/include"
        CFlags += "-std=gnu99"
    }
    android.sources {
        main {
            jni {
                source {
                    srcDir 'src/main/jni/libxxx/src'
                }
            }
        }
    }
    android.productFlavors {
        create("arm") {
            ndk.abiFilters += "armeabi"
        }
        create("arm7") {
            ndk.abiFilters += "armeabi-v7a"
        }
        create("arm8") {
            ndk.abiFilters += "arm64-v8a"
        }
        create("x86") {
            ndk.abiFilters += "x86"
        }
        create("x86-64") {
            ndk.abiFilters += "x86_64"
        }
        create("mips") {
            ndk.abiFilters += "mips"
        }
        create("mips-64") {
            ndk.abiFilters += "mips64"
        }

        create("all")
    }
}

圖書館項目建設完美。 在Android Studio中,它不會顯示任何錯誤。 但是,當嘗試使用Gradle構建此項目時,它將僅嘗試構建app項目,並且實際上將忽略my-library依賴項,從而使類未找到錯誤。

怎么解決這個?

顯然,這是一個未在構建插件中實現的錯誤/功能。

我只找到了一個骯臟的解決方法來直接鏈接生成的aar。

build.gradle(someappname)

repositories {
    flatDir {
        dirs '../my-library/build/outputs/aar'
    }
}

dependencies {
    compile project(':my-library')
    compile(name:'my-library-{flavour}', ext:'aar')
    //the rest
}

我遇到了完全相同的問題,最后發現我的庫項目中的ndk源路徑是錯誤的,我必須添加:

dependencies {
    project ":myHybridLib"
}

在主項目的android.sources.main.jni中。

在糾正這些錯誤后,一切都編譯得很好。

my_library/build.gradle更改為以下內容:

apply plugin: 'com.android.model.library'

model {

android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"

    defaultConfig.with {
        minSdkVersion.apiLevel = 15
        targetSdkVersion.apiLevel = 23
    }
}

android.ndk {
    moduleName = "FlatBuffersParser"
    cppFlags.addAll(['-std=c++11', '-fexceptions', '-Wall', '-Wno-literal-suffix'])
    cppFlags.add("-I${file("src/main/jni/flatbufferslib")}".toString())
    ldLibs.addAll(["android", "log"])
    stl = "gnustl_shared"
   }
}

有關結構的更多信息,請參閱github中的這個項目,它在兩個android模塊中使用實驗性的v0.4.0:

https://github.com/frogermcs/FlatBuffs

面對同樣的問題。 我通過將app子模塊重命名為其他東西來解決它。 所以項目結構將是

Root Project
|-- someappname
|-- my-library

settings.gradle

include ':my-library', ':someappname'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM