From 3c74042c3db8c68e47ed1f0c2ecd4d39a2d84912 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Mon, 11 Feb 2019 14:22:13 +0200 Subject: Load main library as soon as possible Delaying the main library load cause serious problems for people who want to access it's functions from java before the main method is called. Change-Id: I87f3a8282003395e003b06978048762eeabe6548 Fixes: QTBUG-68813 Reviewed-by: Andy Shaw --- .../qtproject/qt5/android/QtActivityDelegate.java | 17 +++--- .../src/org/qtproject/qt5/android/QtNative.java | 65 ++++++++++++---------- .../qtproject/qt5/android/QtServiceDelegate.java | 14 ++--- 3 files changed, 51 insertions(+), 45 deletions(-) (limited to 'src/android') diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 02033859e9..4b87c25787 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -606,11 +606,14 @@ public class QtActivityDelegate } QtNative.loadQtLibraries(loaderParams.getStringArrayList(NATIVE_LIBRARIES_KEY)); ArrayList libraries = loaderParams.getStringArrayList(BUNDLED_LIBRARIES_KEY); - QtNative.loadBundledLibraries(libraries, QtNativeLibrariesDir.nativeLibrariesDir(m_activity)); + String nativeLibsDir = QtNativeLibrariesDir.nativeLibrariesDir(m_activity); + QtNative.loadBundledLibraries(libraries, nativeLibsDir); m_mainLib = loaderParams.getString(MAIN_LIBRARY_KEY); // older apps provide the main library as the last bundled library; look for this if the main library isn't provided - if (null == m_mainLib && libraries.size() > 0) + if (null == m_mainLib && libraries.size() > 0) { m_mainLib = libraries.get(libraries.size() - 1); + libraries.remove(libraries.size() - 1); + } if (loaderParams.containsKey(EXTRACT_STYLE_KEY)) { String path = loaderParams.getString(EXTRACT_STYLE_KEY); @@ -664,8 +667,8 @@ public class QtActivityDelegate } catch (Exception e) { e.printStackTrace(); } - - return true; + m_mainLib = QtNative.loadMainLibrary(m_mainLib, nativeLibsDir); + return m_mainLib != null; } public boolean startApplication() @@ -728,11 +731,7 @@ public class QtActivityDelegate @Override public void run() { try { - String nativeLibraryDir = QtNativeLibrariesDir.nativeLibrariesDir(m_activity); - QtNative.startApplication(m_applicationParameters, - m_environmentVariables, - m_mainLib, - nativeLibraryDir); + QtNative.startApplication(m_applicationParameters, m_environmentVariables, m_mainLib); m_started = true; } catch (Exception e) { e.printStackTrace(); diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 5562c010aa..1d2b70ab5f 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -231,6 +231,41 @@ public class QtNative }); } + public static String loadMainLibrary(final String mainLibrary, final String nativeLibraryDir) + { + final String[] res = new String[1]; + res[0] = null; + m_qtThread.run(new Runnable() { + @Override + public void run() { + try { + String mainLibNameTemplate = "lib" + mainLibrary + ".so"; + File f = new File(nativeLibraryDir + mainLibNameTemplate); + if (!f.exists()) { + try { + ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(), + PackageManager.GET_META_DATA); + String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir; + if (info.metaData.containsKey("android.app.system_libs_prefix")) + systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix"); + f = new File(systemLibraryDir + mainLibNameTemplate); + } catch (Exception e) { + e.printStackTrace(); + return; + } + } + if (!f.exists()) + return; + System.load(f.getAbsolutePath()); + res[0] = f.getAbsolutePath(); + } catch (Exception e) { + Log.e(QtTAG, "Can't load '" + mainLibrary + "'", e); + } + } + }); + return res[0]; + } + public static void setActivity(Activity qtMainActivity, QtActivityDelegate qtActivityDelegate) { synchronized (m_mainActivityMutex) { @@ -308,46 +343,20 @@ public class QtNative }); } - public static boolean startApplication(String params, - final String environment, - String mainLibrary, - String nativeLibraryDir) throws Exception + public static boolean startApplication(String params, final String environment, String mainLib) throws Exception { - String mainLibNameTemplate = "lib" + mainLibrary + ".so"; - File f = new File(nativeLibraryDir + mainLibNameTemplate); - if (!f.exists()) { - try { - ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(), - PackageManager.GET_META_DATA); - String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir; - if (info.metaData.containsKey("android.app.system_libs_prefix")) - systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix"); - f = new File(systemLibraryDir + mainLibNameTemplate); - } catch (Exception e) { - - } - } - if (!f.exists()) - throw new Exception("Can't find main library '" + mainLibrary + "'"); - if (params == null) params = "-platform\tandroid"; - final String mainLibraryPath = f.getAbsolutePath(); final boolean[] res = new boolean[1]; res[0] = false; synchronized (m_mainActivityMutex) { if (params.length() > 0 && !params.startsWith("\t")) params = "\t" + params; - final String qtParams = f.getAbsolutePath() + params; + final String qtParams = mainLib + params; m_qtThread.run(new Runnable() { @Override public void run() { - try { - System.load(mainLibraryPath); - } catch (Exception e) { - Log.i(QtTAG, "Can't load '" + mainLibraryPath + "'", e); - } res[0] = startQtAndroidPlugin(qtParams, environment); setDisplayMetrics(m_displayMetricsScreenWidthPixels, m_displayMetricsScreenHeightPixels, diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java index ae06fa6268..33bcb364de 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java @@ -98,8 +98,8 @@ public class QtServiceDelegate private static final String APP_DISPLAY_METRIC_SCREEN_YDPI_KEY = "display.screen.dpi.y"; private static final String APP_DISPLAY_METRIC_SCREEN_DENSITY_KEY = "display.screen.density"; + private String m_mainLib = null; private Service m_service = null; - private String m_mainLib; private static String m_environmentVariables = null; private static String m_applicationParameters = null; @@ -142,9 +142,9 @@ public class QtServiceDelegate } QtNative.loadQtLibraries(loaderParams.getStringArrayList(NATIVE_LIBRARIES_KEY)); ArrayList libraries = loaderParams.getStringArrayList(BUNDLED_LIBRARIES_KEY); - QtNative.loadBundledLibraries(libraries, QtNativeLibrariesDir.nativeLibrariesDir(m_service)); + String nativeLibsDir = QtNativeLibrariesDir.nativeLibrariesDir(m_service); + QtNative.loadBundledLibraries(libraries, nativeLibsDir); m_mainLib = loaderParams.getString(MAIN_LIBRARY_KEY); - m_environmentVariables = loaderParams.getString(ENVIRONMENT_VARIABLES_KEY); String additionalEnvironmentVariables = "QT_ANDROID_FONTS_MONOSPACE=Droid Sans Mono;Droid Sans;Droid Sans Fallback" + "\tQT_ANDROID_FONTS_SERIF=Droid Serif" @@ -165,7 +165,8 @@ public class QtServiceDelegate else m_applicationParameters = ""; - return true; + m_mainLib = QtNative.loadMainLibrary(m_mainLib, nativeLibsDir); + return m_mainLib != null; } public boolean startApplication() @@ -173,10 +174,7 @@ public class QtServiceDelegate // start application try { String nativeLibraryDir = QtNativeLibrariesDir.nativeLibrariesDir(m_service); - QtNative.startApplication(m_applicationParameters, - m_environmentVariables, - m_mainLib, - nativeLibraryDir); + QtNative.startApplication(m_applicationParameters, m_environmentVariables, m_mainLib); return true; } catch (Exception e) { e.printStackTrace(); -- cgit v1.2.3 From 5c014a48dc9d831457184af1b4302cc4e61632a7 Mon Sep 17 00:00:00 2001 From: Lars Schmertmann Date: Mon, 28 Jan 2019 19:44:34 +0100 Subject: Add missing translations for Android Task-number: QTBUG-72895 Change-Id: Ia9f6d0809c1d8f408a0818367ceb96599c13cbca Reviewed-by: BogDan Vatra Reviewed-by: Sergey Belyashov Reviewed-by: Takumi ASAKI Reviewed-by: Liang Qi Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/android/java/res/values-el/strings.xml | 1 + src/android/java/res/values-es/strings.xml | 1 + src/android/java/res/values-et/strings.xml | 1 + src/android/java/res/values-fa/strings.xml | 1 + src/android/java/res/values-id/strings.xml | 1 + src/android/java/res/values-it/strings.xml | 1 + src/android/java/res/values-ja/strings.xml | 1 + src/android/java/res/values-ms/strings.xml | 1 + src/android/java/res/values-nb/strings.xml | 1 + src/android/java/res/values-nl/strings.xml | 1 + src/android/java/res/values-pl/strings.xml | 1 + src/android/java/res/values-pt-rBR/strings.xml | 1 + src/android/java/res/values-ro/strings.xml | 2 +- src/android/java/res/values-rs/strings.xml | 1 + src/android/java/res/values-ru/strings.xml | 1 + src/android/java/res/values-zh-rCN/strings.xml | 1 + src/android/java/res/values-zh-rTW/strings.xml | 1 + src/android/java/res/values/strings.xml | 2 +- 18 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src/android') diff --git a/src/android/java/res/values-el/strings.xml b/src/android/java/res/values-el/strings.xml index 3cab212f2b..42b2b3b49d 100644 --- a/src/android/java/res/values-el/strings.xml +++ b/src/android/java/res/values-el/strings.xml @@ -3,4 +3,5 @@ Δεν ήταν δυνατή η εύρεση της υπηρεσίας Ministro. Δεν είναι δυνατή η εκκίνηση της εφαρμογής. Η εφαρμογή απαιτεί την υπηρεσία Ministro. Να εγκατασταθεί η υπηρεσία? Παρουσιάστηκε ένα κρίσιμο σφάλμα και η εφαρμογή δεν μπορεί να συνεχίσει. + Αυτή η έκδοση του Android δεν υποστηρίζεται. diff --git a/src/android/java/res/values-es/strings.xml b/src/android/java/res/values-es/strings.xml index cf0b54d0b0..1da33a6444 100644 --- a/src/android/java/res/values-es/strings.xml +++ b/src/android/java/res/values-es/strings.xml @@ -3,4 +3,5 @@ Servicio Ministro inesistente. Imposible ejecutar la aplicación. Esta aplicación requiere el servicio Ministro. Instalarlo? La aplicación ha causado un error grave y no es posible continuar. + Esta versión de Android no es compatible. diff --git a/src/android/java/res/values-et/strings.xml b/src/android/java/res/values-et/strings.xml index d55a3c1471..9620fd2bc8 100644 --- a/src/android/java/res/values-et/strings.xml +++ b/src/android/java/res/values-et/strings.xml @@ -3,4 +3,5 @@ Ei suuda leida Ministro teenust.\nProgrammi ei saa käivitada. See programm vajab Ministro teenust.\nKas soovite paigaldada? Programmiga juhtus fataalne viga.\nKahjuks ei saa jätkata. + Seda Androidi versiooni ei toetata. diff --git a/src/android/java/res/values-fa/strings.xml b/src/android/java/res/values-fa/strings.xml index a8d1b87444..d1ee06118a 100644 --- a/src/android/java/res/values-fa/strings.xml +++ b/src/android/java/res/values-fa/strings.xml @@ -3,4 +3,5 @@ سرویس Ministro را پیدا نمی‌کند. برنامه نمی‌تواند آغاز شود. این نرم‌افزار به سرویس Ministro احتیاج دارد. آیا دوست دارید آن را نصب کنید؟ خطایی اساسی در برنامه‌تان رخ داد و اجرای برنامه نمی‌تواند ادامه یابد. + این نسخه از Android پشتیبانی نمی شود diff --git a/src/android/java/res/values-id/strings.xml b/src/android/java/res/values-id/strings.xml index aaa5bda0de..b25f568ee9 100644 --- a/src/android/java/res/values-id/strings.xml +++ b/src/android/java/res/values-id/strings.xml @@ -3,4 +3,5 @@ Layanan Ministro tidak bisa ditemukan.\nAplikasi tidak bisa dimulai. Aplikasi ini membutuhkan layanan Ministro. Apakah Anda ingin menginstalnya? Aplikasi Anda mengalami kesalahan fatal dan tidak dapat melanjutkan. + Versi Android ini tidak didukung. diff --git a/src/android/java/res/values-it/strings.xml b/src/android/java/res/values-it/strings.xml index 4773419c44..9ba5fe2b1c 100644 --- a/src/android/java/res/values-it/strings.xml +++ b/src/android/java/res/values-it/strings.xml @@ -3,4 +3,5 @@ Servizio Ministro inesistente. Impossibile eseguire \nl\'applicazione. Questa applicazione richiede il servizio Ministro.Installarlo? L\'applicazione ha provocato un errore grave e non puo\' continuare. + Questa versione di Android non è supportata. diff --git a/src/android/java/res/values-ja/strings.xml b/src/android/java/res/values-ja/strings.xml index ba1cfda9ec..40da7dce48 100644 --- a/src/android/java/res/values-ja/strings.xml +++ b/src/android/java/res/values-ja/strings.xml @@ -3,4 +3,5 @@ Ministroサービスが見つかりません。\nアプリケーションが起動できません。 このアプリケーションにはMinistroサービスが必要です。 インストールしてもよろしいですか? アプリケーションで致命的なエラーが発生したため続行できません。 + このバージョンのAndroidはサポートされていません。 diff --git a/src/android/java/res/values-ms/strings.xml b/src/android/java/res/values-ms/strings.xml index 6e3952eaec..bd27890eb2 100644 --- a/src/android/java/res/values-ms/strings.xml +++ b/src/android/java/res/values-ms/strings.xml @@ -3,4 +3,5 @@ Tidak jumpa servis Ministro.\nAplikasi tidak boleh dimulakan. Aplikasi ini memerlukan servis Ministro. Adakah anda ingin pasang servis itu? Aplikasi anda menemui ralat muat dan tidak boleh diteruskan. + Versi Android ini tidak disokong. diff --git a/src/android/java/res/values-nb/strings.xml b/src/android/java/res/values-nb/strings.xml index 8a550e99a2..53529b7f52 100644 --- a/src/android/java/res/values-nb/strings.xml +++ b/src/android/java/res/values-nb/strings.xml @@ -3,4 +3,5 @@ Kan ikke finne tjenesten Ministro. Applikasjonen kan ikke starte. Denne applikasjonen krever tjenesten Ministro. Vil du installere denne? Applikasjonen fikk en kritisk feil og kan ikke fortsette + Denne versjonen av Android støttes ikke. diff --git a/src/android/java/res/values-nl/strings.xml b/src/android/java/res/values-nl/strings.xml index 8a45a724ff..7e54587f61 100644 --- a/src/android/java/res/values-nl/strings.xml +++ b/src/android/java/res/values-nl/strings.xml @@ -3,4 +3,5 @@ De Ministro service is niet gevonden.\nDe applicatie kan niet starten. Deze applicatie maakt gebruik van de Ministro service. Wilt u deze installeren? Er is een fatale fout in de applicatie opgetreden. De applicatie kan niet verder gaan. + Deze versie van Android wordt niet ondersteund. diff --git a/src/android/java/res/values-pl/strings.xml b/src/android/java/res/values-pl/strings.xml index 9fefc92dcd..e7feb01392 100644 --- a/src/android/java/res/values-pl/strings.xml +++ b/src/android/java/res/values-pl/strings.xml @@ -3,4 +3,5 @@ Usługa Ministro nie została znaleziona.\nAplikacja nie może zostać uruchomiona. Aplikacja wymaga usługi Ministro. Czy chcesz ją zainstalować? Wystąpił błąd krytyczny. Aplikacja zostanie zamknięta. + Ta wersja Androida nie jest obsługiwana. diff --git a/src/android/java/res/values-pt-rBR/strings.xml b/src/android/java/res/values-pt-rBR/strings.xml index 67ac3f9f98..4bac77c784 100644 --- a/src/android/java/res/values-pt-rBR/strings.xml +++ b/src/android/java/res/values-pt-rBR/strings.xml @@ -3,4 +3,5 @@ Não foi possível encontrar o serviço Ministro.\nA aplicação não pode iniciar. Essa aplicação requer o serviço Ministro. Gostaria de instalá-lo? Sua aplicação encontrou um erro fatal e não pode continuar. + Esta versão do Android não é suportada. diff --git a/src/android/java/res/values-ro/strings.xml b/src/android/java/res/values-ro/strings.xml index fef52ad3bd..d55c5b5c38 100644 --- a/src/android/java/res/values-ro/strings.xml +++ b/src/android/java/res/values-ro/strings.xml @@ -3,5 +3,5 @@ Serviciul Ministro nu poate fi găsit.\nAplicaţia nu poate porni. Această aplicaţie necesită serviciul Ministro.\nDoriţi să-l instalaţi? Aplicaţia dumneavoastră a întâmpinat o eroare fatală şi nu poate continua. - Versiune Android nesuportată. + Această versiune de Android nu este suportată. diff --git a/src/android/java/res/values-rs/strings.xml b/src/android/java/res/values-rs/strings.xml index 3194ce9022..2a1e8284ce 100644 --- a/src/android/java/res/values-rs/strings.xml +++ b/src/android/java/res/values-rs/strings.xml @@ -3,4 +3,5 @@ Ministro servise nije pronađen. Aplikacija ne može biti pokrenuta. Ova aplikacija zahteva Ministro servis. Želite li da ga instalirate? Vaša aplikacija je naišla na fatalnu grešku i ne može nastaviti sa radom. + Ova verzija Android-a nije podržana. diff --git a/src/android/java/res/values-ru/strings.xml b/src/android/java/res/values-ru/strings.xml index d3cee80f9d..ec853d22f9 100644 --- a/src/android/java/res/values-ru/strings.xml +++ b/src/android/java/res/values-ru/strings.xml @@ -3,4 +3,5 @@ Сервис Ministro не найден.\nПриложение нельзя запустить. Этому приложению необходим сервис Ministro. Вы хотите его установить? Ваше приложение столкнулось с фатальной ошибкой и не может более работать. + Эта версия Android не поддерживается. diff --git a/src/android/java/res/values-zh-rCN/strings.xml b/src/android/java/res/values-zh-rCN/strings.xml index 2eb1269880..58cdd89946 100644 --- a/src/android/java/res/values-zh-rCN/strings.xml +++ b/src/android/java/res/values-zh-rCN/strings.xml @@ -3,4 +3,5 @@ 无法找到Ministro服务。\n应用程序无法启动。 此应用程序需要Ministro服务。您想安装它吗? 您的应用程序遇到一个致命错误导致它无法继续。 + 这个版本的安卓系统不被支持。 diff --git a/src/android/java/res/values-zh-rTW/strings.xml b/src/android/java/res/values-zh-rTW/strings.xml index f6e68efa52..81d2bebdee 100644 --- a/src/android/java/res/values-zh-rTW/strings.xml +++ b/src/android/java/res/values-zh-rTW/strings.xml @@ -3,4 +3,5 @@ 無法找到Ministro服務。\n應用程序無法啟動。 此應用程序需要Ministro服務。您想安裝它嗎? 您的應用程序遇到一個致命錯誤導致它無法繼續。 + 這個版本的安卓系統不被支持。 diff --git a/src/android/java/res/values/strings.xml b/src/android/java/res/values/strings.xml index 95b3385924..0110948dcf 100644 --- a/src/android/java/res/values/strings.xml +++ b/src/android/java/res/values/strings.xml @@ -4,5 +4,5 @@ Can\'t find Ministro service.\nThe application can\'t start. This application requires Ministro service. Would you like to install it? Your application encountered a fatal error and cannot continue. - Unsupported Android version. + This version of Android is not supported. -- cgit v1.2.3