Codenameone 代码名一:了解从JDK23升级到JDK27后的警告和安全异常

Codenameone 代码名一:了解从JDK23升级到JDK27后的警告和安全异常,codenameone,Codenameone,2018年5月,代号1被移至Android API级别27。 之前,我在商店中加载了一个应用程序的0.1版,该应用程序的代码为1,Android API级别为23(这是以前的默认版本) 谷歌正在迫使其所有开发者在2018年11月1日之前将应用升级到更新的API,这就是为什么我几天前向商店提交了相同的应用,没有任何代码修改,使用最新版本的Codename One构建 今天我收到了以下碰撞保护报告我的问题有助于理解所有警告和java.lang.SecurityException。我的应用程序不需要任

2018年5月,代号1被移至Android API级别27。 之前,我在商店中加载了一个应用程序的0.1版,该应用程序的代码为1,Android API级别为23(这是以前的默认版本)

谷歌正在迫使其所有开发者在2018年11月1日之前将应用升级到更新的API,这就是为什么我几天前向商店提交了相同的应用,没有任何代码修改,使用最新版本的Codename One构建

今天我收到了以下碰撞保护报告我的问题有助于理解所有警告和
java.lang.SecurityException
。我的应用程序不需要任何特殊权限,在运行过程中也不向用户请求权限(这是一个非常简单的应用程序)。在将应用升级到API级别27之前,我从未收到过这些警告和此异常

[EDT] 0:0:0,1 - Codename One revisions: 38629bb7dc1724677b602b7cf175bee9bf0d67c8

[EDT] 0:0:0,4 - WARNING: Theme sets the commandBehavior constant which is deprecated.  Please update the theme to NOT include this theme constant.  Using commandBehavior may cause your app to perform in unexpected ways.  In particular, using SIDE command behavior in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime exceptions.
[EDT] 0:0:0,6 - WARNING: Display.setCommandBehavior() is deprecated, Using it may result in unexpected behaviour. In particular, using COMMAND_BEHAVIOR_SIDE_NAVIGATION in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime errors.
[EDT] 0:0:0,11 - STARTING of the app "Giorno per giorno" version 0.2
[EDT] 0:0:0,12 - Platform: Unknown
[EDT] 0:0:0,13 - Platform Name: and
[EDT] 0:0:0,15 - OS: Android
[EDT] 0:0:0,17 - OS Version: 8.0.0
[EDT] 0:0:0,19 - Display Width: 1080
[EDT] 0:0:0,20 - Display Height: 2150
[EDT] 0:0:0,22 - Device density: DENSITY_HD
[EDT] 0:0:0,23 - mese: 10
[EDT] 0:0:0,24 - giorno del mese: 19
[EDT] 0:0:0,36 - I'm trying to open the file /giorno-293.txt
[EDT] 0:0:0,38 - File opened successfully
[EDT] 0:0:0,38 - isNativeShareSupported: true
[EDT] 0:0:0,874 - Exception: java.lang.SecurityException - Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10400000 cmp=com.huawei.android.launcher/.powersavemode.PowerSaveModeLauncher (has extras) } from ProcessRecord{e69f9b7 13566:cloud.amoremio.app.daybyday/u0a110} (pid=13566, uid=10110) not exported from uid 10072
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10400000 cmp=com.huawei.android.launcher/.powersavemode.PowerSaveModeLauncher (has extras) } from ProcessRecord{e69f9b7 13566:cloud.amoremio.app.daybyday/u0a110} (pid=13566, uid=10110) not exported from uid 10072
    at android.os.Parcel.readException(Parcel.java:1946)
    at android.os.Parcel.readException(Parcel.java:1892)
    at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4373)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1631)
    at android.app.Activity.startActivityForResult(Activity.java:4751)
    at android.app.Activity.startActivityForResult(Activity.java:4691)
    at com.codename1.impl.android.CodenameOneActivity.startActivityForResult(CodenameOneActivity.java:576)
    at android.app.Activity.startActivity(Activity.java:5112)
    at android.app.Activity.startActivity(Activity.java:5080)
    at com.codename1.impl.android.CodenameOneActivity.startActivity(CodenameOneActivity.java:590)
    at com.codename1.impl.android.d.W(AndroidImplementation.java:1311)
    at com.codename1.s.q.o(Display.java:1546)
    at com.codename1.s.ab.c(MenuBar.java:1413)
    at com.codename1.s.aj.c(SideMenuBar.java:704)
    at com.codename1.s.u.c(Form.java:2748)
    at com.codename1.s.q.a(Display.java:2015)
    at com.codename1.s.q.j(Display.java:1043)
    at com.codename1.s.q.i(Display.java:961)
    at com.codename1.s.ai.run(RunnableWrapper.java:120)
    at com.codename1.impl.b$1.run(CodenameOneThread.java:60)
    at java.lang.Thread.run(Thread.java:784)
[EDT] 0:0:0,877 - Exception in Giorno per giorno version 0.2
[EDT] 0:0:0,877 - OS and
[EDT] 0:0:0,878 - Error java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10400000 cmp=com.huawei.android.launcher/.powersavemode.PowerSaveModeLauncher (has extras) } from ProcessRecord{e69f9b7 13566:cloud.amoremio.app.daybyday/u0a110} (pid=13566, uid=10110) not exported from uid 10072
[EDT] 0:0:0,878 - Current Form null
[EDT] 0:0:0,879 - Exception: java.lang.SecurityException - Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10400000 cmp=com.huawei.android.launcher/.powersavemode.PowerSaveModeLauncher (has extras) } from ProcessRecord{e69f9b7 13566:cloud.amoremio.app.daybyday/u0a110} (pid=13566, uid=10110) not exported from uid 10072
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10400000 cmp=com.huawei.android.launcher/.powersavemode.PowerSaveModeLauncher (has extras) } from ProcessRecord{e69f9b7 13566:cloud.amoremio.app.daybyday/u0a110} (pid=13566, uid=10110) not exported from uid 10072
    at android.os.Parcel.readException(Parcel.java:1946)
    at android.os.Parcel.readException(Parcel.java:1892)
    at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4373)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1631)
    at android.app.Activity.startActivityForResult(Activity.java:4751)
    at android.app.Activity.startActivityForResult(Activity.java:4691)
    at com.codename1.impl.android.CodenameOneActivity.startActivityForResult(CodenameOneActivity.java:576)
    at android.app.Activity.startActivity(Activity.java:5112)
    at android.app.Activity.startActivity(Activity.java:5080)
    at com.codename1.impl.android.CodenameOneActivity.startActivity(CodenameOneActivity.java:590)
    at com.codename1.impl.android.d.W(AndroidImplementation.java:1311)
    at com.codename1.s.q.o(Display.java:1546)
    at com.codename1.s.ab.c(MenuBar.java:1413)
    at com.codename1.s.aj.c(SideMenuBar.java:704)
    at com.codename1.s.u.c(Form.java:2748)
    at com.codename1.s.q.a(Display.java:2015)
    at com.codename1.s.q.j(Display.java:1043)
    at com.codename1.s.q.i(Display.java:961)
    at com.codename1.s.ai.run(RunnableWrapper.java:120)
    at com.codename1.impl.b$1.run(CodenameOneThread.java:60)
    at java.lang.Thread.run(Thread.java:784)

这似乎是华为启动器中的一个bug。当用户按下应用程序主窗体中的后退按钮时,默认情况下,我们会最小化应用程序(这是Android中的惯例)。最小化方法在Android上实现如下:

public boolean minimizeApplication() {
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startMain.putExtra("WaitForResult", Boolean.FALSE);
    getContext().startActivity(startMain);
    return true;
}
这本质上要求系统返回“家”。它不需要权限或任何特定的内容,但华为似乎错误地配置了他们的活动,因此失败了。我认为这仅仅意味着退出这些设备上的应用程序将失败。用户可能仍然可以使用home按钮本身而不是back按钮


不幸的是,华为似乎没有公开的bug报告系统。希望他们能解决这个问题,否则就会出现一个解决方案。

您是在应用程序生命周期的早期还是在后台调用minimize?不,我不使用
MinimizeApplications()
。该应用程序非常简单,它只是根据一年中的某一天显示一条文本。它从txt文件中读取文本。它只由一小班学生组成。完整的资料来源在这里:你如何复制这个?你是通过Android Studio运行的,还是在构建服务器上发生的?你是怎么触发的?我收到了那份事故防护报告。崩溃昨天发生在大约1000个应用程序用户中的一个,所以我无法重现这个问题。也许这并不重要,但很奇怪。我无法在装有安卓8的华为设备上测试后退按钮,因为我手中或正在使用的设备场中都没有后退按钮。然而,如果问题是后退按钮,我希望为后退按钮分配一个函数是一个解决方案。在我的例子中,例如:
hi.getToolbar().setBackCommand(Command.create(null,null,e->{this.previousDay();}),Toolbar.BackCommandPolicy.NEVER)问题在于调用minimize,而主窗体上的默认设置是最小化应用程序。这可以解决问题,但也可能会对其他Android设备产生不希望的影响,因为这些设备与平台约定不匹配(回到主视图中应该最小化)。