停止使用Support库的Android Studio

7

我正在尝试让Android Studio中的Android项目不使用Support库。我的问题是,当我使用片段时,它期望使用支持片段,并导致应用程序崩溃。

我的Min SDK是14,目标SDK是19。我的理解是,因为我针对这些版本,所以不需要支持库。如果我错了,请纠正我。

我想要纠正这个错误java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment。我知道我可以通过使用SupportMapFragment来修复它。但我不想这样做。我想要使用常规的MapFragment。

所以我主要的问题是如何停止期望使用支持库片段并只使用常规片段。我也遇到了其他片段的这个问题,而不仅仅是地图。


1
有一些支持v4 Fragment的功能,在v14设备上不被支持,例如嵌套Fragments(在v16中添加)。您是否有特别的原因不想使用v4 Fragments(特别是因为您可能需要支持库中的其他类,如ViewPager)? - ianhanniballake
我认为未来可能会出现一些不兼容的情况。我想支持库需要更长时间才能获得最新功能。但是经过进一步调查,我可能是错的。我想对于这个项目,我可能会将其保留为v4版本。但我仍然很好奇如何阻止项目使用它。如果我只需要创建一个具有更高min sdk版本的项目,请创建一个回答,并我会标记它为答案。谢谢。 - Chris Kdon
谷歌更新支持库与平台版本一起发布(即最新修订版19与API级别19同时发布),这样就不会出现不兼容的问题。 - ianhanniballake
4个回答

13

我很惊讶没有人能给你一个直截了当的答案,希望我的回答能帮到你。

要停止Android Studio使用支持库,尤其是臭名昭著的AppCompat v7,请按照以下几个步骤操作:

1)Gradle Scripts > build.gradle(Module: app)

2)删除一行代码,代码如下:compile 'com.android.support:appcompat-v7:22.1.1'

3)res/values/styles.xml > 修改父级参考值为:parent="@android:style/Theme.Holo.Light"

4)AndroidManifest.xml > 将应用程序的android:theme修改为:android:theme="@android:style/Theme.Holo.Light"

5)进入你的活动并删除导入支持库的代码行。将它改为:import android.app.Activity;

6)现在在菜单栏中:Build > ReBuild Project。纠正任何错误,然后不断重建,直到使其正常工作,最后运行你的项目以确保没有崩溃和引用顺序正确。

对于我而言,我得到了错误提示说app:ShowAsAction不被支持之类的错误。我不得不将其更改为android:ShowAsAction。只要确保在任何错误出现时,仔细阅读并遵循弹出在错误行旁边的小对话框中的建议即可。


1
要完全删除支持库,请进入“包资源管理器”窗口,在您的项目名称-> libs 中删除android-support-v4.jar。如果这样做,请删除所有以android.support.v4开头的导入,并将它们替换为适当的(非支持)导入。

我的/libs文件夹中没有任何库。而且我已经从build.gradle文件中删除了support库。 - Chris Kdon

1
如果您已经从build.gradle中删除了支持库,并且libs文件夹中没有文件,请确保删除了导入的内容。

根据错误消息,看起来您的类顶部会有以下导入(否则错误将无法识别尝试转换为支持Fragments):

import android.support.v4.app.Fragment;

删除此行并替换为:

import android.app.Fragment;

对所有支持引用都执行此操作。


你说得对。我最终在项目的其他地方找到了导入,当我发布这篇文章时并不知道。谢谢。 - Chris Kdon
没问题,很高兴听到你解决了它。正如其他人所说,兼容库会与平台同时更新 - 如果你想要最新的功能并仍然能够访问大多数Android用户群体,你必须使用兼容库。 - Adam S

1
你可以将此代码添加到应用 gradle 文件中,以避免使用 support v4 库。
android {
configurations.all {   //this piece is important to avoid duplicates
        exclude group: 'com.android.support',
                module: 'support-v4'
    }
}

这只是解决依赖之间的重复问题吗?或者它甚至不包括 support-v4,以致其他低端设备也无法使用 support-v4。我们什么时候能做到这一点?@vuhoanghiep1993 - Noman khanbhai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接