【发布时间】:2017-11-14 11:46:38
【问题描述】:
我在为 Android 初始化 Crashlytics 时遇到问题。 Java 部分工作正常,但我无法使 NDK 部分工作,因为 crashlytics_init() 返回空值;
我的项目/build.gradle
buildscript {
repositories {
jcenter()
google()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'io.fabric.tools:gradle:1.24.4'
classpath 'com.google.gms:google-services:3.1.0'
}
}
allprojects {
repositories {
jcenter()
google()
maven {
url 'https://maven.fabric.io/public'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app/build.gradle 包含
compileSdkVersion 26
android {
defaultConfig {
...
minSdkVersion 19
targetSdkVersion 22
...
}
...
}
crashlytics {
enableNdk true
manifestPath 'C:\\full\\path\\to\\manifest\\AndroidManifest.xml'
}
dependencies {
implementation 'com.google.firebase:firebase-crash:11.6.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
transitive = true
}
compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
transitive = true;
}
compile 'com.google.firebase:firebase-core:11.6.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:support-v4:26.1.0'
compile 'org.apache.commons:commons-compress:1.12'
compile 'org.tukaani:xz:1.5'
}
主要活动代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
jniCrashlyticsInit();
...
}
以及 jniCrashlyticsInit() 的原生内容
void Java_com_my_app_MainActivity_jniCrashlyticsInit(JNIEnv *env,
jobject thiz)
{
crashlytics = crashlytics_init();
if (crashlytics == NULL)
log("CRASHLYTICS NULL");
else
log("CRASHLYTICS NON NULL");
}
正如您想象的那样,“CRASHLYTICS NULL”已被记录,它无法初始化所有内容。
我也将日志放在crashlytics.h 中,它恰好在这一行失败(返回空值)
__crashlytics_unspecified_t* ctx = ((__crashlytics_initialize_t) sym_ini)();
由于我没有进一步的信息,我真的不知道如何进行。 想法?
更多信息: 我用的是Android studio 3.0.0,NDK库是用下面的命令手动编译的
/cygdrive/c/Android/ndk-r15c/ndk-build.cmd NDK_DEBUG=0 APP_BUILD_SCRIPT=./Android.mk NDK_PROJECT_PATH=. APP_PLATFORM=android-19
**** 11 月 20 日更新 ****
按照 Todd Burner 的建议,我在 build.gradle 上从 "compile" 切换到 "implementation" 来自
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
transitive = true
}
compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
transitive = true;
}
到
implementation('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
transitive = true
}
implementation('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
transitive = true;
}
然后我跑了
./gradlew assemble --refresh-dependencies
不幸的是,crashlytics_init() 仍然返回 NULL
【问题讨论】:
-
感谢您与我们联系。我们还没有正式支持 AS 3,这可以解释这一点。如果您在 AS 2.x.x 中遇到任何问题,能否告诉我。这个项目是迁移了还是在 AS 3 中设置为新项目?谢谢!
-
感谢您的回复!项目已经 2 岁了,我上周搬到了 AS 3,但我昨天第一次尝试使用 Crashlytics。因此我不知道它是否适用于 AS 2。抱歉:(顺便说一句,java 崩溃已被完美检测和收集。
-
您可以尝试将编译切换到实现并运行 ./gradlew assemble --refresh-dependencies 谢谢!
-
Burner 先生,我按照您的建议做了(请检查更新后的问题)。不走运 X(
-
也许您忘记在 Java 端初始化 CrashlyticsNdk?在这里看到它,它帮助了我:stackoverflow.com/questions/47211657/… P.S. Crashlytics NDK 文档很糟糕:它缺少大量信息和示例...
标签: crashlytics crashlytics-android