【问题标题】:Activity with tabs work in debug but not working on release带有选项卡的活动在调试中有效,但在发布时无效
【发布时间】:2017-12-11 20:04:48
【问题描述】:

我正在使用一个带有 3 个选项卡的活动,这在调试中完美运行,但是当我发布应用程序并生成签名 APK 时,我的应用程序崩溃了。

我的布局

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            app:layout_scrollFlags="enterAlways"
            app:navigationIcon="@drawable/ic_launcher"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"
            app:tabMode="fixed" />
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

生成APK“应用程序停止”时的错误信息

java.lang.NoSuchMethodError: 
  at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates (Unknown Source)
  at android.support.v7.widget.AppCompatDrawableManager.getDrawable (Unknown Source)
  at android.support.v7.widget.AppCompatDrawableManager.getDrawable (Unknown Source)
  at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup (Unknown Source)
  at android.support.v7.widget.AppCompatDrawableManager.getDrawable (Unknown Source)
  at android.support.v7.widget.TintTypedArray.getDrawableIfKnown (Unknown Source)
  at android.support.v7.app.AppCompatDelegateImplBase.<init> (Unknown Source)
  at android.support.v7.app.AppCompatDelegateImplV9.<init> (Unknown Source)
  at android.support.v7.app.AppCompatDelegateImplV11.<init> (Unknown Source)
  at android.support.v7.app.AppCompatDelegateImplV14.<init> (Unknown Source)
  at android.support.v7.app.AppCompatDelegateImplV23.<init> (Unknown Source)
  at android.support.v7.app.AppCompatDelegate.create (Unknown Source)
  at android.support.v7.app.AppCompatDelegate.create (Unknown Source)
  at android.support.v7.app.AppCompatActivity.getDelegate (Unknown Source)
  at android.support.v7.app.AppCompatActivity.onCreate (Unknown Source)
  at com.app.sgi.AppMovil.ModuloCosecha.CensarCosecha.onCreate (Unknown Source)
  at android.app.Activity.performCreate (Activity.java:6294)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1108)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476)
  at android.app.ActivityThread.access$900 (ActivityThread.java:150)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1344)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:148)
  at android.app.ActivityThread.main (ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

我的 gradle 文件

defaultConfig {
        generatedDensities = []
        vectorDrawables.useSupportLibrary = true
        minSdkVersion 15
        targetSdkVersion 27
        return true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    aaptOptions {
        additionalParameters "--no-version-vectors"
    }

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:27.0.2'
    compile 'com.android.support:support-v4:27.0.2'
    compile 'com.android.support:design:27.0.2'
    compile 'com.google.android.gms:play-services-maps:11.6.2'
    compile 'com.google.maps.android:android-maps-utils:0.4'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'net.zetetic:android-database-sqlcipher:3.5.4@aar'
}

请帮忙,谢谢。 我不明白为什么它在开发(调试)中有效,但在生产中无效(发布生成的 APK)

已编辑的 gradle(不工作)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.1'
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        generatedDensities = []
        vectorDrawables.useSupportLibrary = true
        minSdkVersion 15
        targetSdkVersion 26
        return true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    aaptOptions {
        additionalParameters "--no-version-vectors"
    }    
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        return true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:26.0.1'
    //compile 'com.android.support:support-v4:26.0.1'
    compile 'com.android.support:design:26.0.1'
    compile 'com.google.android.gms:play-services-maps:11.6.2'
    compile 'com.google.maps.android:android-maps-utils:0.4'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'net.zetetic:android-database-sqlcipher:3.5.4@aar'
}

【问题讨论】:

  • 尝试删除这个compile 'com.android.support:support-v4:27.0.2'...你的buildToolVersion..是什么?
  • 我的 buildToolVersion android { compileSdkVersion 27 buildToolsVersion '27.0.2' useLibrary 'org.apache.http.legacy'
  • 我正在尝试删除 "compile 'com.android.support:support-v4:27.0.2'" 但不起作用
  • 我不确定27.0.2..是否是一个稳定版本...尝试降级buildToolsVersion "26.0.1"compile 'com.android.support:appcompat-v7:26.0.1'--只是一个建议
  • 尝试使用 27.0.2 但无法正常工作

标签: android layout release


【解决方案1】:

我终于找到了错误。 我尝试在我的 build.gradle set minifyEnabled false 中生成禁用 ProGuard 的 APK,如下所示:

buildTypes {
        release {
            minifyEnabled false
        }
    }

我生成 APK 并在 minifyEnabled 为 false 时完美运行,但当 minifyEnabled 为 true 时,我的应用程序失败。

看到这个帖子: ProGuard with Android: java.lang.NoSuchMethodError: android.util.Xml.asAttributeSet

我的解决方案设置为 minifyEnabled true:

buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }

并在 proguard-project.txt 中添加一行

-keep class org.xmlpull.v1.** { *; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多