Codename One: понимать предупреждения и SecurityException после обновления с JDK23 до JDK27 - PullRequest
0 голосов
/ 19 октября 2018

В мае 2018 года Codename One был переведен на Android API Level 27. Ранее я загружал в магазин версию 0.1 приложения, созданного с Codename One, с Android API Level 23 (это было по умолчанию).

Google вынуждает всех своих разработчиков обновить приложения до более нового API до 1 ноября 2018 года, поэтому я несколько дней назад отправил в магазин то же самое приложение, без каких-либо изменений кода, созданное с последней версией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)

1 Ответ

0 голосов
/ 21 октября 2018

Это похоже на ошибку в модуле запуска Huawei.Когда пользователь нажимает кнопку «Назад» в главной форме приложения, мы по умолчанию сворачиваем приложение (как это принято в 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;
}

Это по сути просит систему вернуться «домой».Для этого не требуются разрешения или что-то конкретное, но кажется, что Huawei неправильно настроил их деятельность, и это не удалось.Я думаю, что это просто означает, что отказ от приложения на этих устройствах не удастся.Пользователь, вероятно, все еще может использовать саму кнопку «домой» вместо кнопки «назад».

К сожалению, похоже, у Huawei нет общедоступной системы сообщений об ошибках.Надеюсь, они исправят эту проблему, или найдется обходной путь.

...