Android 如何调试导致我的应用程序强制关闭的部分(向后兼容性问题)

Android 如何调试导致我的应用程序强制关闭的部分(向后兼容性问题),android,android-support-library,android-6.0-marshmallow,android-9.0-pie,Android,Android Support Library,Android 6.0 Marshmallow,Android 9.0 Pie,这是我第一次尝试编写任何类型的代码,更不用说android应用了。我创建的项目的compileSdkVersion为28,targetSdkVersion为28,minSdkVersion为23。该应用程序将只在Android Pie上运行,并在我尝试安装它的任何早期版本上崩溃 在模拟器和我的个人手机上(都在Pie上),一切都可以正常编译,工作得非常出色。我读了很多关于使用Android支持库的书,但是,我没有看到任何关于如何理解代码的哪些部分需要使用支持库和框架中的东西的信息。Android

这是我第一次尝试编写任何类型的代码,更不用说android应用了。我创建的项目的compileSdkVersion为28,targetSdkVersion为28,minSdkVersion为23。该应用程序将只在Android Pie上运行,并在我尝试安装它的任何早期版本上崩溃

在模拟器和我的个人手机上(都在Pie上),一切都可以正常编译,工作得非常出色。我读了很多关于使用Android支持库的书,但是,我没有看到任何关于如何理解代码的哪些部分需要使用支持库和框架中的东西的信息。Android Studio可能在使用支持库中的东西的过程中给了我警告,但作为一个新手,我不知道这意味着什么,也不知道我的正确选择应该是什么。现在我明白了,我不知道如何回过头来寻找(然后修复)任何需要使用支持库的东西

我导入了com.android.support:appcompat-v7,并使用了AppCompatActivity而不是Activity。简而言之,我使用TextView、EditText、微调器和TabHost(带有两个选项卡)。我认为ActionBar可能也是一个问题,但不知道如何确定这是否是问题所在,以及如何解决它

代码的其余部分是数学计算,包含一组if/then/else语句和一些switch语句

在安装到Android Pie之前的任何操作系统上后,应用程序强制在打开时关闭

content_main.xml(布局)中的代码段:


bg_spinner.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/swimToolPrimary"/>
            <corners android:radius="10dp" />
            <stroke android:color="#000000" android:width="1dp" />
        </shape>
    </item>
    <item android:gravity="center_vertical|right" android:right="8dp">
        <layer-list>
            <item android:width="12dp" android:height="12dp"  android:gravity="center" android:bottom="10dp"
                tools:targetApi="m">
                <rotate
                    android:fromDegrees="45"
                    android:toDegrees="45">
                    <shape android:shape="rectangle">
                        <solid android:color="@color/swimToolSecondary" />
                        <stroke android:color="@color/swimToolSecondary" android:width="1dp"/>
                    </shape>
                </rotate>
            </item>
            <item android:width="20dp" android:height="10dp" android:bottom="21dp" android:gravity="center"
                tools:targetApi="m">
                <shape android:shape="rectangle">
                    <solid android:color="@color/swimToolPrimary"/>
                </shape>
            </item>
        </layer-list>
    </item>
</layer-list>


您可以通过选择logcat右上角的“无过滤器”在android studio的日志中检查问题,对于过滤数据,您可以在搜索栏中添加应用程序的软件包名称

当应用程序强制关闭时,您可以从AndroidStudio中的LogCat获取日志。通常,这些日志包含一个堆栈跟踪,您可以在其中找到问题的根本原因。我发现这是:由:android.view.InflateException:二进制XML文件行#14:二进制XML文件行#99:错误膨胀类微调器我猜这是因为我使用了可绘制的。是否需要更改布局xml文件?这就是调用可绘制文件的地方。@TonyD可能是您将可绘制文件放错了位置。您需要将您的drawable放入
drawable
文件夹中,以便所有类型的设备都可以使用该文件夹。drawable(它是一个xml文件)位于drawable文件夹中。当我到家时,我会附上我的密码。现在我的问题缩小了,我知道要附加哪些代码片段了。@TonyD我检查了棉花糖和牛轧糖设备中的代码。这对我很管用。之后,为了得到错误,我移动了drawable-v24中的bg_微调器,得到了和您得到的相同的错误。所以我认为你们应该检查bg_微调器是否放在res/drawable文件夹中,就这样。它在drawable-v24文件夹中。好的,所以我需要做的就是把它移到drawable文件夹。那么这两个文件夹之间有什么区别呢?非常感谢你的帮助!实际上,所有不同的可绘制文件夹都适用于不同的屏幕密度。所以,如果您在drawable-v24中保持您的drawable,那么密度不同的设备将无法获得它。所有类型的设备都可以访问res/drawable中保存的任何drawable。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/swimToolPrimary"/>
            <corners android:radius="10dp" />
            <stroke android:color="#000000" android:width="1dp" />
        </shape>
    </item>
    <item android:gravity="center_vertical|right" android:right="8dp">
        <layer-list>
            <item android:width="12dp" android:height="12dp"  android:gravity="center" android:bottom="10dp"
                tools:targetApi="m">
                <rotate
                    android:fromDegrees="45"
                    android:toDegrees="45">
                    <shape android:shape="rectangle">
                        <solid android:color="@color/swimToolSecondary" />
                        <stroke android:color="@color/swimToolSecondary" android:width="1dp"/>
                    </shape>
                </rotate>
            </item>
            <item android:width="20dp" android:height="10dp" android:bottom="21dp" android:gravity="center"
                tools:targetApi="m">
                <shape android:shape="rectangle">
                    <solid android:color="@color/swimToolPrimary"/>
                </shape>
            </item>
        </layer-list>
    </item>
</layer-list>