Android ndk androidNdkOut和androidNdkLibsOut自动检测库不工作

Android ndk androidNdkOut和androidNdkLibsOut自动检测库不工作,android-ndk,google-fabric,crashlytics-android,Android Ndk,Google Fabric,Crashlytics Android,最新的织物文档显示 如果将Gradle版本2.2.0+的Android插件与externalNativeBuild DSL一起使用,则应删除androidNdkOut和androidNdkLibsOut属性,因为结构插件将自动检测这些路径。 但它对我不起作用,因为我想我的本机代码位于库模块中。我在库模块中有本机代码,并在应用模块中启用了Crashlytics。我怎样才能让它工作 我正在使用com.android.tools.build:gradle:2.3.3和io.fabric.tools:g

最新的织物文档显示

如果将Gradle版本2.2.0+的Android插件与externalNativeBuild DSL一起使用,则应删除androidNdkOut和androidNdkLibsOut属性,因为结构插件将自动检测这些路径。 但它对我不起作用,因为我想我的本机代码位于库模块中。我在库模块中有本机代码,并在应用模块中启用了Crashlytics。我怎样才能让它工作

我正在使用com.android.tools.build:gradle:2.3.3和io.fabric.tools:gradle:1.23.0

错误:

com.crashlytics.tools.android.project.codemapping异常:crashlytics找不到NDK输出目录“[my app module path]/obj”。-androidNdkOut设置配置是否正确

更新。 我已将Crashlytics配置移动到我的库模块:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath('com.android.tools.build:gradle:2.3.3') {
            force = true
        }
        classpath 'io.fabric.tools:gradle:1.23.0'
    }
}

repositories {
    jcenter()
}

apply plugin: 'com.android.library'
apply plugin: 'io.fabric'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
    publishNonDefault true

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "core"
        }

        externalNativeBuild {
            ndkBuild {
                abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"
            }
        }
    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
            debuggable true
            jniDebuggable true
            minifyEnabled false
        }
        release {
            debuggable false
            jniDebuggable false
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    externalNativeBuild {
        ndkBuild {
            path 'jni/Android.mk'
        }
    }
}

crashlytics {
    enableNdk true
    baseManifestPath '../app/src/main/AndroidManifest.xml'
}

dependencies {
    compile "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:design:${rootProject.ext.supportLibVersion}"
    compile "com.google.android.gms:play-services-maps:${rootProject.ext.playServicesVersion}"
    compile "com.google.android.gms:play-services-location:${rootProject.ext.playServicesVersion}"
}
我的应用程序模块现在只包含依赖项:

dependencies {    
    // Crashlytics Kit
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true
    }
    // NDK Kit
    compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
        transitive = true
    }
}
但现在我发现了一个错误

在com.crashlytics.tools.gradle.CrashlyticsExtension类型的对象上,找不到参数[my Manifest的路径]的方法baseManifestPath()


迈克,这里是布艺公司。当NDK资产直接构建到您的应用程序中时,这种改进会有所帮助,但当作为单独的库项目构建时,这种改进就没有帮助了。当本机代码是外部库的一部分时,项目结构可能会有所不同。在运行符号上载之前,您需要包含一个Ant或Gradle任务来临时创建适当的项目结构

一旦组装了适当的项目结构,并且有了可用的AndroidManifest.xml文件,就需要为Fabric插件设置一些要使用的属性

使用Ant

对于Ant,应创建具有以下属性的fabric.properties文件:

enableNDK=true
androidBaseManifest=AndroidManifest.xml
externalCSymUpload=true
然后,要运行符号上传,调用
crashlytics devtools.jar
,它可以在Ant插件zip文件中找到。调用
java-jar crashlytics-devtools.jar-properties fabric.properties
将启动上载过程

AndroidBaseMifest属性使用应用程序的API键和包名定义到
AndroidManifest.xml
文件的路径

使用渐变 对于Gradle,您需要一个最小的Android build.Gradle文件,并且可以直接在crashlytics{}块中定义属性:Fabric Gradle插件要求在build.Gradle中应用Android Gradle插件

apply plugin: 'com.android.library'
apply plugin: 'io.fabric'

android {
  compileSdkVersion <CURRENT COMPILESDKVERSION>
  buildToolsVersion "<YOUR BUILD TOOLS VERSION>"

  defaultConfig {
    applicationId "<YOUR APP'S PACKAGE NAME>"
  }
}

crashlytics {
  enableNdk true
  baseManifestPath 'AndroidManifest.xml'
}
apply插件:“com.android.library”
应用插件:“io.fabric”
安卓{
编译DK版本
buildToolsVersion“”
默认配置{

applicationId“我面临同样的问题。我有主应用程序模块“app”和“library”模块,其中包含ndk源代码

2019年6月更新

上个月,我在使用gradle执行“crashlyticsUploadSymbolRelease”命令时出错。libs文件的位置似乎已更改

以下代码允许我查看带有行号的NDK崩溃:

crashlytics {
    enableNdk true
    androidNdkOut '../library/build/intermediates/cmake/release/obj'
    androidNdkLibsOut '../library/build/intermediates/stripped_native_libs/release/out/lib'
}

希望有帮助。

我试图将Crashlytics配置移动到我的库模块,但现在出现错误
无法为参数[清单的路径]找到方法baseManifestPath()在com.crashlytics.tools.gradle.CrashlyticsExtension类型的对象上。
您可以为您的应用程序和模块共享build.gradle吗?我在初始问题中添加了build.gradle。使用gradle时是否可以在生成后自动上载符号?这就是
externalCSymUpload
ant属性所做的吗?如果是,是否有一个相等的gradle中的valent?没有一个gradle等价物。@rzhik-确保您使用的是我们的gradle插件的1.25.4。谢谢。这篇文章和详细信息帮助了我,但由于我们项目的具体情况,我们不得不稍微更改为
androidNdkOut
,以使用合并的\u native\u libs文件夹而不是cmake。我们没有我们的任何本机代码但是我们的应用程序是一个react原生应用程序,它本身包含原生代码。因此我们的
androidNdkOut
设置是:
androidkout“$buildDir/intermediates/merged\u native\u libs/remoteRelease/out/lib”
。我们使用的是Fabric gradle插件1.31.2也请参见此