簡體   English   中英

將Android API從27降級到21(KOTLIN)后出現錯誤

[英]Error after downgrade Android API from 27 to 21 (KOTLIN)

我嘗試將我的應用程序從api 27降級到21,因為我的目標api是從21降到27。但是它只能在API 26和27上運行。降級后,我嘗試在API 21上安裝,然后該應用程序無法打開(它停止工作打開后)

這是我的main_activity

package com.ddm.xposed.digi_com

import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import com.felhr.usbserial.UsbSerialDevice
import com.felhr.usbserial.UsbSerialInterface
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    var unlock : Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)


        val toggle = ActionBarDrawerToggle(
                this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        drawer_layout.setDrawerListener(toggle)
        toggle.syncState()

        nav_view.setItemIconTintList(null);

        nav_view.setNavigationItemSelectedListener(this)

        displayScreen(-1)


    }

    override fun onBackPressed() {
        if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
            drawer_layout.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        when (item.itemId) {
            R.id.action_settings -> return true
            else -> return super.onOptionsItemSelected(item)
        }
    }

    fun displayScreen(id: Int){

        val fragment = when(id){
            R.id.nav_connect -> {
                ConnectFragment()
            }

            else -> {
                ConnectFragment()
            }

        }

        supportFragmentManager.beginTransaction().replace(R.id.relativeLayout,fragment).commit()
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        // Handle navigation view item clicks here.

        displayScreen(item.itemId)

        drawer_layout.closeDrawer(GravityCompat.START)
        return true
    }


}

這是調試錯誤

E / AndroidRuntime:致命例外:主進程:com.ddm.xposed.digi_com,PID:2279 java.lang.RuntimeException:無法啟動活動ComponentInfo {com.ddm.xposed.digi_com / com.ddm.xposed.digi_com.MainActivity }:android.view.InflateException:二進制XML文件第16行:錯誤放大了類android.support.design.widget.NavigationView,位於android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298),位於android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2360)在android.app.ActivityThread.access $ 800(ActivityThread.java:144)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)在android.os.Handler.dispatchMessage(Handler .java:102),位於android.os.Looper.loop(Looper.java:135),位於android.app.ActivityThread.main(ActivityThread.java:5221),位於java.lang.reflect.Method.invoke(本機方法),位於com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)處com.android.internal.java.lang.reflect.Method.invoke(Method.java:372)。 os.ZygoteInit.main(ZygoteInit.java:694)原因:android.view.InflateException:二進制XML文件行#16:錯誤膨脹了android.view.LayoutInflater.createView(LayoutInflater)類android.support.design.widget.NavigationView .java:633),位於android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743),位於android.view.LayoutInflater.rInflate(LayoutInflater.java:806),位於android.view.LayoutInflater.inflate(LayoutInflater.java:504)在android.view.LayoutInflater.inflate(LayoutInflater.java:414)在android.view.LayoutInflater.inflate(LayoutInflater.java:365)在android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)在com.ddm.xposed.digi_com.MainActivity.onCreate(MainActivity.kt:32)上的android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)在android.app.Activity.performCreate(Activity.java: 5937),位於android.app.ActivityThread.perfo,位於android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) rmLaunchActivity(ActivityThread.java:2251)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)在android.app.ActivityThread.access $ 800(ActivityThread.java:144)在android.app.ActivityThread $ H.handleMessage( android.os.Handler.dispatchMessage(Handler.java:102)上的ActivityThread.java:1278)android.app.ActivityThread.main(ActivityThread.java:5221)上android.os.Looper.loop(Looper.java:135)上的ActivityThread.java:1278) ),位於com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java)的java.lang.reflect.Method.invoke(Method.java:372)處的java.lang.reflect.Method.invoke(本機方法) :899),位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694),由以下原因引起:java.lang.reflect.Constructor.newInstance(本機方法)處的java.lang.reflect.InvocationTargetException .reflect.Constructor.newInstance(Constructor.java:288)在android.view.LayoutInflater.createView(LayoutInflater.java:607)在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:806)在android.view.LayoutInflater.inflate(LayoutInflater.java:504)在android.view.LayoutInflater.inflate(LayoutInflater.java:414)在android.view。 android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)上的LayoutInflater.inflate(LayoutInflater.java:365)在com.android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)上.ddm.xposed.digi_com.MainActivity.onCreate(MainActivity.kt:32)在android.app.Activity.performCreate(Activity.java:5937)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)在android。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)在android.app.ActivityThread.access $ 800(ActivityThread.java:144)在android.app.ActivityThread $ android.os.Handler.dispatchMessage(Handle)上的H.handleMessage(ActivityThread.java:1278) r.java:102)位於android.os.Looper.loop(Looper.java:135)位於android.app.ActivityThread.main(ActivityThread.java:5221)位於java.lang.reflect.Method.invoke(本機方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)處的com.android.internal.os.ZygoteInit.main處的java.lang.reflect.Method.invoke(Method.java:372) (ZygoteInit.java:694)由:android.content.res.Resources $ NotFoundException:資源ID

0x7f060057

  at android.content.res.Resources.getValue(Resources.java:1233) at android.content.res.Resources.getDrawable(Resources.java:756) at android.content.Context.getDrawable(Context.java:402) at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319) at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:145) at android.support.v7.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:422) at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:393) at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.<init>(NavigationMenuPresenter.java:255) at android.support.design.internal.NavigationMenuPresenter.getMenuView(NavigationMenuPresenter.java:97) at android.support.design.widget.NavigationView.<init>(NavigationView.java:149) at android.support.design.widget.NavigationView.<init>(NavigationView.java:88) at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) at com.ddm.xposed.digi_com.MainActivity.onCreate(MainActivity.kt:32) at android.app.Activity.performCreate(Activity.java:5937) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) 

根據我的回答對這個SO

您正在遇到此問題,因為您僅在drawable-v26中擁有資源,並且試圖在v21中引用它們。 將它們移動到drawable文件夾或drawable-v21(如果較低版本中不需要這些資源)

說明:

當您請求提供替代資源的資源時,Android會根據當前設備配置選擇運行時要使用的替代資源。

假設您當前的操作系統版本為23:

操作系統嘗試通過將設備配置與可用替代資源進行比較,從drawable-v23選擇可drawable-v23

根據文檔

系統根據以下邏輯決定使用哪種資源:Android如何找到最匹配的資源的流程圖如下

Android如何找到最匹配的資源的流程圖。

優先級基於此處定義的表

它實際上適用於消除選擇。 它將首先消除drawable-v24及更高版本,並嘗試在drawable-v23及更低版本中找到drawable。 由於無法在drawable-v23及以下版本中找到可drawable-v23 ,因此引發異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM