diff options
Diffstat (limited to 'src/android')
3 files changed, 35 insertions, 40 deletions
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..c5e8a5f794 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -41,6 +41,7 @@ package org.qtproject.qt5.android; import java.io.File; +import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.concurrent.Semaphore; @@ -59,6 +60,7 @@ import android.os.Looper; import android.content.ClipboardManager; import android.content.ClipboardManager.OnPrimaryClipChangedListener; import android.content.ClipData; +import android.os.ParcelFileDescriptor; import android.util.Log; import android.view.ContextMenu; import android.view.KeyEvent; @@ -168,6 +170,17 @@ public class QtNative return ok; } + public static int openFdForContentUrl(Context context, String contentUrl, String openMode) + { + try { + ContentResolver resolver = context.getContentResolver(); + ParcelFileDescriptor fdDesc = resolver.openFileDescriptor(Uri.parse(contentUrl), openMode); + return fdDesc.detachFd(); + } catch (FileNotFoundException e) { + return -1; + } + } + // this method loads full path libs public static void loadQtLibraries(final ArrayList<String> libraries) { diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java index ae9ccc09db..9d5578ed6d 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java @@ -471,6 +471,7 @@ public abstract class QtLoader { } { + // why can't we load the plugins directly from libs ?!?! String key = BUNDLED_IN_LIB_RESOURCE_ID_KEY; if (m_contextInfo.metaData.containsKey(key)) { String[] list = m_context.getResources().getStringArray(m_contextInfo.metaData.getInt(key)); @@ -589,58 +590,41 @@ public abstract class QtLoader { if (apkDeployFromSystem && libsDir == null) throw new Exception(""); - String localPrefix = "/data/local/tmp/qt/"; - if (m_contextInfo.metaData.containsKey("android.app.libs_prefix")) - localPrefix = m_contextInfo.metaData.getString("android.app.libs_prefix"); - String pluginsPrefix = localPrefix; + if (m_qtLibs != null) { + String libPrefix = libsDir + "lib"; + for (int i = 0; i < m_qtLibs.length; i++) + libraryList.add(libPrefix + m_qtLibs[i] + ".so"); + } - boolean bundlingQtLibs = false; if (m_contextInfo.metaData.containsKey("android.app.bundle_local_qt_libs") && m_contextInfo.metaData.getInt("android.app.bundle_local_qt_libs") == 1) { File dataDir = new File(m_context.getApplicationInfo().dataDir); - localPrefix = dataDir.getCanonicalPath() + "/"; - pluginsPrefix = localPrefix + "qt-reserved-files/"; + String dataPath = dataDir.getCanonicalPath() + "/"; + String pluginsPrefix = dataPath + "qt-reserved-files/"; if (libsDir == null) throw new Exception(""); - cleanOldCacheIfNecessary(localPrefix, pluginsPrefix); + cleanOldCacheIfNecessary(dataPath, pluginsPrefix); extractBundledPluginsAndImports(pluginsPrefix, libsDir); - bundlingQtLibs = true; - } - - if (m_qtLibs != null) { - String libPrefix = libsDir + "lib"; - for (int i = 0; i < m_qtLibs.length; i++) - libraryList.add(libPrefix + m_qtLibs[i] + ".so"); - } - - if (m_contextInfo.metaData.containsKey("android.app.load_local_libs")) { - String[] extraLibs = m_contextInfo.metaData.getString("android.app.load_local_libs").split(":"); - for (String lib : extraLibs) { - if (lib.length() > 0) - libraryList.add((lib.startsWith("lib/") ? localPrefix : pluginsPrefix) + lib); - } - } - - String dexPaths = new String(); - String pathSeparator = System.getProperty("path.separator", ":"); - if (!bundlingQtLibs && m_contextInfo.metaData.containsKey("android.app.load_local_jars")) { - String[] jarFiles = m_contextInfo.metaData.getString("android.app.load_local_jars").split(":"); - for (String jar:jarFiles) { - if (jar.length() > 0) { - if (dexPaths.length() > 0) - dexPaths += pathSeparator; - dexPaths += localPrefix + jar; + if (m_contextInfo.metaData.containsKey(BUNDLED_IN_LIB_RESOURCE_ID_KEY)) { + String[] extraLibs = m_contextInfo.metaData.getString("android.app.load_local_libs").split(":"); + for (String lib : extraLibs) { + if (!lib.isEmpty()) + libraryList.add(pluginsPrefix + lib); } } + + ENVIRONMENT_VARIABLES += "\tQML2_IMPORT_PATH=" + pluginsPrefix + "/qml" + + "\tQML_IMPORT_PATH=" + pluginsPrefix + "/imports" + + "\tQT_PLUGIN_PATH=" + pluginsPrefix + "/plugins"; } Bundle loaderParams = new Bundle(); loaderParams.putInt(ERROR_CODE_KEY, 0); - loaderParams.putString(DEX_PATH_KEY, dexPaths); + loaderParams.putString(DEX_PATH_KEY, new String()); loaderParams.putString(LOADER_CLASS_NAME_KEY, loaderClassName()); if (m_contextInfo.metaData.containsKey("android.app.static_init_classes")) { loaderParams.putStringArray(STATIC_INIT_CLASSES_KEY, @@ -683,10 +667,7 @@ public abstract class QtLoader { ENVIRONMENT_VARIABLES += "\tMINISTRO_ANDROID_STYLE_PATH=" + stylePath + "\tQT_ANDROID_THEMES_ROOT_PATH=" + themePath; - loaderParams.putString(ENVIRONMENT_VARIABLES_KEY, ENVIRONMENT_VARIABLES - + "\tQML2_IMPORT_PATH=" + pluginsPrefix + "/qml" - + "\tQML_IMPORT_PATH=" + pluginsPrefix + "/imports" - + "\tQT_PLUGIN_PATH=" + pluginsPrefix + "/plugins"); + loaderParams.putString(ENVIRONMENT_VARIABLES_KEY, ENVIRONMENT_VARIABLES); String appParams = null; if (APPLICATION_PARAMETERS != null) diff --git a/src/android/templates/AndroidManifest.xml b/src/android/templates/AndroidManifest.xml index 992ceb3aa2..f4b99e0895 100644 --- a/src/android/templates/AndroidManifest.xml +++ b/src/android/templates/AndroidManifest.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto"> +<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="-- %%INSERT_VERSION_NAME%% --" android:versionCode="-- %%INSERT_VERSION_CODE%% --" android:installLocation="auto"> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/> <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application. @@ -48,6 +48,7 @@ <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/> <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/> <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/> + <meta-data android:value="@string/unsupported_android_version" android:name="android.app.unsupported_android_version"/> <!-- Messages maps --> <!-- Splash screen --> |