Android ndk androidNdkOut和androidNdkLibsOut自动检测库不工作
最新的织物文档显示 如果将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配置移动到我的库模块: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
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也请参见此