android - 使用实验性 gradle 插件时,模块应用程序依赖项会导致 "error: package x does not exist"

标签 android gradle react-native android-gradle-plugin

我有一个基于 Android NDK 的项目,它使用实验性的 gradle 插件。我正在尝试添加 React Native 和 React Native Navigation (RNN)模块到项目

RNN 附带的示例项目按预期构建和运行。然而,为了使 RNN 与我的项目兼容,我必须更新其 build.gradle 文件以使用实验性 gradle 插件:https://github.com/adamski/react-native-navigation/commit/0a848f574cedae83bf8961bd1fafe8a42e4257cc

我遇到以下构建错误:

Error:(64, 1) error: package com.reactnativenavigation.activities does not exist

我已经在 SO 和网络上寻找解决方案。我可以看到该项目并在 AS 中导航它:

Android Studio RNN module

但是,在导航到主 Activity java 类时,它会显示红线,无法找到依赖项,即使它提供了将文件导入主项目的选项(?)。

我的settings.gradle:

include ':app'
include ':react-native-navigation'
project(':react-native-navigation').projectDir = new File(rootProject.projectDir, '../../node_modules/react-native-navigation/android/app/')

项目build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-rc1'
    }
}
allprojects {
    repositories {
        jcenter()
        maven {  // All of React Native (JS, Android binaries) is installed from npm
            url "$rootDir/../../node_modules/react-native/android" // node_modules is two levels up from the AndroidStudio project folder
        }
    }
}

应用程序的build.gradle:

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"
        defaultConfig.with {
            applicationId = "com.company.myapp"
            minSdkVersion.apiLevel = 16
            targetSdkVersion.apiLevel = 22
        }
    }
    android.ndk {
        moduleName = "juce_jni"
        toolchain = "clang"
        stl = "c++_static"
        cppFlags.add("-fsigned-char")
        cppFlags.add("-fexceptions")
        cppFlags.add("-frtti")
        cppFlags.add("-std=c++11")
        cppFlags.add("-DJUCE_ENABLE_LIVE_CONSTANT_EDITOR=0")
        cppFlags.add("-DJUCER_ANDROIDSTUDIO_4330F05B=1")
        cppFlags.add("-DJUCE_APP_VERSION=0.4.0")
        cppFlags.add("-DJUCE_APP_VERSION_HEX=0x400")
        cppFlags.add("-I${project.rootDir}/../../Fonts".toString())
        cppFlags.add("-I${project.rootDir}/../../Source".toString())
        cppFlags.add("-I${project.rootDir}/../iOS".toString())
        cppFlags.add("-I${project.rootDir}/../../../../juce_modules/adamski/PitchDetector/modules".toString())
        cppFlags.add("-I${project.rootDir}/../../Source/LookAndFeel".toString())
        cppFlags.add("-I${project.rootDir}/../../Source/Synth".toString())
        cppFlags.add("-I${project.rootDir}/../../Source/UI".toString())
        ldLibs.add("android")
        ldLibs.add("EGL")
        ldLibs.add("GLESv2")
        ldLibs.add("log")
        platformVersion = 15
    }
    android.sources {
        main {
            jni {
                source {
                    exclude "**/JuceModules/"
                }
            }
        }
    }
    android.buildTypes {
        debug {
            ndk.with {
                debuggable = true
                cppFlags.add("-g")
                cppFlags.add("-DDEBUG=1")
                cppFlags.add("-D_DEBUG=1")
                cppFlags.add("-O0")
                cppFlags.add("-I${project.rootDir}/../../JuceLibraryCode".toString())
                cppFlags.add("-I${project.rootDir}/../../../../JUCE/modules".toString())
                cppFlags.add("-I${project.rootDir}/../../../../juce_modules/adamski".toString())
                cppFlags.add("-DJUCE_ANDROID=1")
                cppFlags.add("-DJUCE_ANDROID_API_VERSION=21")
                cppFlags.add("-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_company_myapp_MyApp")
                cppFlags.add("-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/company/myapp/MyApp\"")
                cppFlags.add("-DJUCE_ENABLE_LIVE_CONSTANT_EDITOR=0")
            }
        }
        release {
            signingConfig = $("android.signingConfigs.releaseConfig")
            ndk.with {
                cppFlags.add("-DNDEBUG=1")
                cppFlags.add("-O3")
                cppFlags.add("-I${project.rootDir}/../../JuceLibraryCode".toString())
                cppFlags.add("-I${project.rootDir}/../../../../JUCE/modules".toString())
                cppFlags.add("-I${project.rootDir}/../../../../juce_modules/adamski".toString())
                cppFlags.add("-DJUCE_ANDROID=1")
                cppFlags.add("-DJUCE_ANDROID_API_VERSION=21")
                cppFlags.add("-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_company_myapp_MyApp")
                cppFlags.add("-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/company/myapp/MyApp\"")
                cppFlags.add("-DJUCE_ENABLE_LIVE_CONSTANT_EDITOR=0")
            }
        }
    }
    android.signingConfigs {
        create("releaseConfig") {
            storeFile = new File("/Users/adamelemental/.android/debug.keystore")
            storePassword = "android"
            keyAlias = "androiddebugkey"
            keyPassword = "android"
            storeType = "jks"
        }
    }
    android.productFlavors {
        create("armeabi") {
            ndk.abiFilters.add("armeabi")
        }
        create("armeabi-v7a") {
            ndk.abiFilters.add("armeabi-v7a")
        }
        create("x86") {
            ndk.abiFilters.add("x86")
        }
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:support-v4:+'
    compile 'com.facebook.react:react-native:+'

    // The following do not work with the experimental gradle plugin:
    //    debugCompile project(path: ':react-native-navigation', configuration: 'libraryDebug')
    //    releaseCompile project(path: ':react-native-navigation', configuration: 'libraryRelease')

    compile project (':react-native-navigation')
}

最佳答案

删除 RNN 的 build.gradleproductFlavors 部分解决了这个问题。

关于android - 使用实验性 gradle 插件时,模块应用程序依赖项会导致 "error: package x does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730675/

相关文章:

切换到 gradle 后,android 自定义 View 属性不起作用

android - 如何要求特定构建类型的环境变量?

plugins - 从 gradle 扩展访问配置闭包

ios - 如何在React Native IOS中运行一次GIF?

android - 从未使用过的观察者方法

android - 发送通知到另一部手机

javascript - 在 React Native WebView 中播放 Wistia 视频

javascript - 有没有办法隐藏react-navigation-drawer组件的标题标题

android - ListView 向上滚动时加载更多

android - Buildozer 构建 Android Kivy 应用程序返回命令失败