【问题标题】:Android DexGuard: Exclude Crashlytics from ObfuscationAndroid DexGuard:从混淆中排除 Crashlytics
【发布时间】:2015-11-30 19:44:09
【问题描述】:

当我关闭 DexGuard 时,我的应用程序可以与 Crashlytics 完美运行。但是,当我添加以下配置来混淆我的代码时,应用程序在启动时卡住并黑屏。

这里是build.gradle

的相关部分
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'dexguard'

repositories {
  maven { url 'https://maven.fabric.io/public' }
}

dependencies {
   compile fileTree(dir: 'libs', include: '*.jar')
   compile project(':MyProject')
   compile('commons-validator:commons-validator:1.4.0') {
      exclude group: 'commons-logging', module: 'commons-logging'
   }

   compile project(':android-maps-extensions')
   compile('com.crashlytics.sdk.android:crashlytics:2.5.1@aar') {
      transitive = true;
   }
}

android {
   publishNonDefault true
   compileSdkVersion 23
   buildToolsVersion "23"
   compileOptions {
      encoding "windows-1254"
   }

   defaultConfig {
    applicationId "com.x.y"
    minSdkVersion 16
    targetSdkVersion 22
    multiDexEnabled true
   }
   lintOptions {
      abortOnError false
      checkReleaseBuilds false
   }

   dexOptions{
      incremental true
      javaMaxHeapSize "4g"
      jumboMode  true
   }

   android.enforceUniquePackageName = false

   buildTypes {
      debug {
         minifyEnabled false
       }
       release {
          minifyEnabled true
          proguardFiles getDefaultDexGuardFile('dexguard-release.pro'),'dexguard-project.txt'
       }
   }
}

基础 build.gradle 文件:

buildscript {
   repositories {
      flatDir dirs: System.getenv('DEXGUARD_LIB')
      jcenter()
      maven { url 'https://maven.fabric.io/public' }
   }

   dependencies {
      classpath ':dexguard'
      classpath 'com.android.tools.build:gradle:1.2.3'
      classpath 'io.fabric.tools:gradle:1.+'
   }
}

dexguard-project.txt文件的相关部分:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-multidex

-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**

Logcat 控制台输出:

Could not find method com.crashlytics.android.Crashlytics.getInstance, referenced from method com.x.y.application.MyApplication.ʻ
Could not find method com.crashlytics.android.Crashlytics.getInstance, referenced from method com.x.y.application.MyApplication.ˏ
Could not find method com.crashlytics.android.Crashlytics.getInstance, referenced from method com.x.y.application.MyApplication.ᐝ

Starting window AppWindowToken{4518e2c0 token=Token{43255cd8 ActivityRecord{42d2a290 u0 com.x.y.tst/com.x.y.activity.start.FirstActivity t369}}} timed out

我实际上在用 Crashlytics.getInstance 做什么:

Crashlytics.getInstance().core.setString("ENVIRONMENT", "TEST");

我在构建日志中没有看到任何警告或错误。 有谁知道是什么导致了这个问题?

提前致谢!

【问题讨论】:

    标签: android obfuscation crashlytics dexguard


    【解决方案1】:

    您是否尝试在dexguard 之后应用io.fabric

    我有一个使用 dexguard 和 crashlytics 的应用程序,Crashlytics.getInstance().core.setString("ENVIRONMENT", BuildConfig.BUILD_TYPE); 不会导致错误。我使用与您相同的 -keep-dontwarn 配置。

    来自我的build.gradle 文件

    apply plugin: 'com.android.application' apply plugin: 'dexguard' apply plugin: 'io.fabric'

    【讨论】:

    • 谢谢!这为我解决了这个问题。
    • 我已经尝试过了,但没有运气。现在,我删除了 GooglePlayServices 的不必要组件,引用数量减少到 65k 以下。无论如何感谢您的回复。
    猜你喜欢
    • 2015-06-14
    • 2019-03-19
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多