Android 应用因 SIG 9 而崩溃
Android app crashes with SIG 9
我知道,通常你会告诉我检查日志(在崩溃之前,看看我是否遗漏了什么)。 .没什么,因为当我尝试启动新的 activity 时,应用程序无论如何都会崩溃。唯一有效的两个活动是 SplashScreen
和 SignIn
为了找出问题所在,我做了一些简单的事情
public class SplashScreen extends AppCompatActivity{
private final static String TAG = SplashScreen.class.getSimpleName();
private final static int DELAY = 2000;
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
startActivity(new Intent(this, Root.class));
finish();
}
和Root.class
public class Root extends AppCompatActivity {
private final static String TAG = Root.class.getSimpleName();
private long backPressedTime = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
Log.i(TAG, "super.onCreate");
setContentView(R.layout.trending);
Log.i(TAG, "setContentView");
}
所以我设置了一些日志,看起来我转到了第二个日志。第三个 setcontentView
没有显示在控制台中。问题就更奇怪了,因为无论 class 我尝试从什么开始,结果都是一样的。
提及:
检查日志,没有异常(警告 03-13 13:52:33.302 23233-23233/com.example.codkom.shirtex W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable ...
在应用程序上工作了几天,并在我的个人设备上进行了测试(工作没有问题,即使现在它确实如此)但在任何其他设备上都没有..
if 算数,我使用 multidex,我覆盖了我的 Application
class 并根据文档做了 Multidex.install(context);
(之所以这样说是因为我猜可能是由 Multidex 引起的,但在没有 multidex 的 API 21+ 上进行了测试并且没问题(因为 API 21+ 自行处理 multidex)
我的项目中有 7 个活动,其中 3 个出现问题
我已经到了不知道还能做什么的地步.. 所以这就是我带着这个问题来到这里的原因。
要求:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cl_"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.AppBarLayout
android:background="@drawable/overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
app:layout_scrollFlags="enterAlways|scroll"
app:navigationIcon="@drawable/ic_hamburger_menu">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_15_dp"
android:id="@+id/fab_"
android:backgroundTint="@color/blue"
app:fabSize="normal"
android:src="@drawable/ic_plus"
app:layout_anchor="@id/content_frame"
app:layout_anchorGravity="center|bottom"
app:layout_behavior="com.example.codkom.shirtex.ScrollAwareFABBehavior"/>
</android.support.design.widget.CoordinatorLayout>
<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start">
<include layout="@layout/mainmenu_activity"/>
</android.support.design.widget.NavigationView>
在清单中
<application
android:name=".application.ShirTexApp"
android:allowBackup="true"
android:icon="@drawable/ic_app_logo"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat"
android:fullBackupContent="true">
<activity android:name=".activities.Root" android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:windowSoftInputMode="adjustPan"/>
</application>
看来,您正在为图像使用矢量绘图。 Vector Drawables 不支持低于 5.0 的版本。要在 5.0 以下和所有设备中制作支持矢量绘图,请按照以下步骤操作。
第 1 步:
首先你要在gradle中提到。
提供支持库
implementation 'com.android.support:appcompat-v7:23.2.0'
启用 Vecor Drawable 支持
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
第 2 步:
在设计 XML 中,直接使用 ImageViews 时应该使用 srcCompat
而不是 Vector Drawables src
。
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
在支持Views的leftDrawable、rightDrawable等组件的drawable时,需要将vector包裹在drawable中。
ic_action_wrapped.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_action_search_vector"/>
</selector>
第 3 步:
当您在运行时加载矢量图像时,您必须像那样加载图像。
AppCompatResources.getDrawable(mContext,R.drawable.ic_action_search_vector);
对于应用程序中的某些设备 class 或您的 Activity。
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
你的情况
基于日志,工具栏或 FloatingActionButton 有矢量图像变化并检查。
Google 文档:official android docs
Stack Overflow 也有很多矢量绘图的参考。
希望对您有所帮助。
我知道,通常你会告诉我检查日志(在崩溃之前,看看我是否遗漏了什么)。 .没什么,因为当我尝试启动新的 activity 时,应用程序无论如何都会崩溃。唯一有效的两个活动是 SplashScreen
和 SignIn
为了找出问题所在,我做了一些简单的事情
public class SplashScreen extends AppCompatActivity{
private final static String TAG = SplashScreen.class.getSimpleName();
private final static int DELAY = 2000;
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
startActivity(new Intent(this, Root.class));
finish();
}
和Root.class
public class Root extends AppCompatActivity {
private final static String TAG = Root.class.getSimpleName();
private long backPressedTime = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
Log.i(TAG, "super.onCreate");
setContentView(R.layout.trending);
Log.i(TAG, "setContentView");
}
所以我设置了一些日志,看起来我转到了第二个日志。第三个 setcontentView
没有显示在控制台中。问题就更奇怪了,因为无论 class 我尝试从什么开始,结果都是一样的。
提及:
检查日志,没有异常(警告
03-13 13:52:33.302 23233-23233/com.example.codkom.shirtex W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable ...
在应用程序上工作了几天,并在我的个人设备上进行了测试(工作没有问题,即使现在它确实如此)但在任何其他设备上都没有..
if 算数,我使用 multidex,我覆盖了我的
Application
class 并根据文档做了Multidex.install(context);
(之所以这样说是因为我猜可能是由 Multidex 引起的,但在没有 multidex 的 API 21+ 上进行了测试并且没问题(因为 API 21+ 自行处理 multidex)我的项目中有 7 个活动,其中 3 个出现问题
我已经到了不知道还能做什么的地步.. 所以这就是我带着这个问题来到这里的原因。
要求:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cl_"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.AppBarLayout
android:background="@drawable/overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
app:layout_scrollFlags="enterAlways|scroll"
app:navigationIcon="@drawable/ic_hamburger_menu">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_15_dp"
android:id="@+id/fab_"
android:backgroundTint="@color/blue"
app:fabSize="normal"
android:src="@drawable/ic_plus"
app:layout_anchor="@id/content_frame"
app:layout_anchorGravity="center|bottom"
app:layout_behavior="com.example.codkom.shirtex.ScrollAwareFABBehavior"/>
</android.support.design.widget.CoordinatorLayout>
<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start">
<include layout="@layout/mainmenu_activity"/>
</android.support.design.widget.NavigationView>
在清单中
<application
android:name=".application.ShirTexApp"
android:allowBackup="true"
android:icon="@drawable/ic_app_logo"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat"
android:fullBackupContent="true">
<activity android:name=".activities.Root" android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:windowSoftInputMode="adjustPan"/>
</application>
看来,您正在为图像使用矢量绘图。 Vector Drawables 不支持低于 5.0 的版本。要在 5.0 以下和所有设备中制作支持矢量绘图,请按照以下步骤操作。
第 1 步:
首先你要在gradle中提到。 提供支持库
implementation 'com.android.support:appcompat-v7:23.2.0'
启用 Vecor Drawable 支持
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
第 2 步:
在设计 XML 中,直接使用 ImageViews 时应该使用 srcCompat
而不是 Vector Drawables src
。
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />
在支持Views的leftDrawable、rightDrawable等组件的drawable时,需要将vector包裹在drawable中。
ic_action_wrapped.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_action_search_vector"/>
</selector>
第 3 步: 当您在运行时加载矢量图像时,您必须像那样加载图像。
AppCompatResources.getDrawable(mContext,R.drawable.ic_action_search_vector);
对于应用程序中的某些设备 class 或您的 Activity。
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
你的情况 基于日志,工具栏或 FloatingActionButton 有矢量图像变化并检查。
Google 文档:official android docs
Stack Overflow 也有很多矢量绘图的参考。
希望对您有所帮助。