Android Studio 项目适用于 Lollipop 但不适用于 Kitkat

Android Studio project works on Lollipop but does not work on Kitkat

我有一个 Android Studio 项目,它在具有 Android 构建版本 Lollipop 的设备上运行良好,但在具有 [=] 的设备上尝试 运行 它时抛出异常25=] 构建版本 Kitkat。这是我项目的 build.gradle 文件:

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

            renderscriptTargetApi 22
            renderscriptSupportModeEnabled true

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/org.apache.commons.io.jar')
    compile files('libs/commons-codec-1.10.jar')
    compile('com.twitter.sdk.android:twitter:1.6.0@aar') {
        transitive = true;
    }
    compile files('libs/pinit-sdk-1.0.jar')
    compile project(':bounceScroller')
    compile 'com.ogaclejapan.smarttablayout:library:1.2.1@aar'
    compile 'com.facebook.android:facebook-android-sdk:4.1.0'
    compile 'com.android.support:appcompat-v7:21.2.0'
    compile 'com.github.navasmdc:MaterialDesign:1.5@aar'
    compile 'com.nineoldandroids:library:2.4.+'
    compile 'com.esri.arcgis.android:arcgis-android:10.2.6-2'
    compile 'com.github.clans:fab:1.5.3'
    compile 'com.github.pedrovgs:draggablepanel:1.8'
    compile 'com.android.support:support-v4:21.2.0'
    compile 'com.ogaclejapan.smarttablayout:utils-v4:1.2.1@aar'
    compile 'com.github.bumptech.glide:glide:3.6.0'
    compile project(':rangeseekbar')
    compile 'com.android.support:recyclerview-v7:22.2.0'
    compile 'com.android.support:cardview-v7:22.2.0'
    compile project(':blurry')
    compile 'com.google.android.gms:play-services:7.8.0'
}

这是我在 Kitkat 设备上 运行 应用程序时遇到的错误:

java.lang.RuntimeException: Unable to start activity: android.view.InflateException: Binary XML file line #14: Error inflating class android.support.v4.view.ViewPager
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access0(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class android.support.v4.view.ViewPager
            at android.view.LayoutInflater.createView(LayoutInflater.java:626)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
            at android.app.Activity.setContentView(Activity.java:2010)
            at android.visitabudhabi.com.vad.Walkthrough.onCreate(Walkthrough.java:32)
            at android.app.Activity.performCreate(Activity.java:5426)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access0(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:600)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
            at android.app.Activity.setContentView(Activity.java:2010)
            at android.visitabudhabi.com.vad.Walkthrough.onCreate(Walkthrough.java:32)
            at android.app.Activity.performCreate(Activity.java:5426)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access0(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoClassDefFoundError: android.support.v4.view.ViewConfigurationCompatFroyo
            at android.support.v4.view.ViewConfigurationCompat$FroyoViewConfigurationVersionImpl.getScaledPagingTouchSlop(ViewConfigurationCompat.java:56)
            at android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop(ViewConfigurationCompat.java:105)
            at android.support.v4.view.ViewPager.initViewPager(ViewPager.java:368)
            at android.support.v4.view.ViewPager.<init>(ViewPager.java:356)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at android.view.LayoutInflater.createView(LayoutInflater.java:600)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)
            at android.app.Activity.setContentView(Activity.java:2010)
            at android.visitabudhabi.com.vad.Walkthrough.onCreate(Walkthrough.java:32)
            at android.app.Activity.performCreate(Activity.java:5426)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access0(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

这是我的 XML,它有 ViewPager:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:overScrollMode="never" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:layout_below="@+id/pager"
        android:layout_gravity="bottom"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/first"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3.3"
            android:background="#c7333f" />

        <ImageView
            android:id="@+id/second"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3.3"
            android:background="#FFF" />

        <ImageView
            android:id="@+id/third"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3.3"
            android:background="#fff" />
    </LinearLayout>


</FrameLayout>

有人知道怎么解决吗?

好的。第一次调用 fill_parent .

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:overScrollMode="never" />

用这个代替你的。

compile 'com.android.support:support-v4:21.0.3'

设置targetSdkVersion 19

编辑 1

你设置

compileSdkVersion 23
buildToolsVersion "23.0.1"

targetSdkVersion 23

希望对您有所帮助。

主要问题是您的 compileSdkVersion 与项目中包含的支持库的主要版本不匹配。遵循这些规则:

将 targetSdkVersion 设置为 22,因为您想在 Lollipop 设备上使用 Lollipop 功能(暂时不关心 Marshmallow)。

将 compileSdkVersion 设置为 23,因为它是最新的。

将 buildToolsVersion 设置为“23.0.1”,因为它是最新的。

将支持库版本设置为最新匹配的compileSdkVersion:

compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.android.support:recyclerview-v7:23.1.0'
compile 'com.android.support:cardview-v7:23.1.0'

如果有人来到这里,我就是这样解决问题的。

深入搜索问题后,我发现这不是膨胀异常,尽管 logcat 是这么说的,真正的异常是由臭名昭著的 65K 问题引起的 OutOfMemory 异常 click here for more information about the problem并且包裹着膨胀的异常。

为了解决这个问题,我首先在我的 build.gradle 文件中添加了 multidex 支持库:

compile 'com.android.support:multidex:1.0.0'

然后我按照以下三个简单的步骤使其工作:

  1. 如果您没有自己实现应用程序 class,您可以在应用程序标签下的 Android 清单文件中简单地定义库的 MultiDexApplication:

    android:name="android.support.multidex.MultiDexApplication"

  2. 如果您要实现自己的应用程序 class,您可以简单地覆盖 MultiDexApplication 文件:

    public class MyAwesomeApplication 扩展了 MultiDexApplication {

  3. 或者如果您的应用程序 class 已经在扩展另一个 class,您可以覆盖 attachBaseContext 方法并添加以下调用:

    @Override protected void attachBaseContext(上下文基础){ super.attachBaseContext(上下文); Multidex.install(这个); }

我已经有了自己的应用程序 class,它从 class“应用程序”扩展而来,所以我直接跳到第 3 步,瞧,它在 Kitkat 和 Lollipop 上工作。

希望这对任何人都有帮助。快乐编码。