summaryrefslogtreecommitdiffstats
path: root/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
diff options
context:
space:
mode:
authorAnton Miller <a.miller@netris.ru>2017-05-12 14:45:03 +0300
committerAnton Miller <a.miller@netris.ru>2017-06-28 12:11:46 +0000
commit57a77fe775886b17fc267a4acb490890748d9ee0 (patch)
tree57b56c4244d4ecdf4d1971e6eb7e443c2e300cce /src/android/jar/src/org/qtproject/qt5/android/QtNative.java
parent9b54447e453e2cb7b7375e2c6104b2595ab1594e (diff)
Android: Allow deploying Qt apps as system apps
The main app shared library and shared dependencies are not automatically deployed when the apk is placed in /system/app or /system/priv-app. In such cases, we need to place these libraries in /system/lib and tell QtLoader to load them from here. It is possible to specify a custom library path in AndroidManifest.xml. [ChangeLog][Android][QtLoader] Enabled loading shared libraries from /system/lib or a custom path specified with the android.app.system_libs_prefix metadata variable in AndroidManifest.xml. This allows deploying Qt apps as Android system apps. Change-Id: I8388e91a53475b06a027467face45c08f096fbf8 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java32
1 files changed, 30 insertions, 2 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 76dffbd213..92a7ec43e3 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -49,6 +49,7 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
@@ -188,7 +189,21 @@ public class QtNative
for (String libName : libraries) {
try {
- File f = new File(nativeLibraryDir+"lib"+libName+".so");
+ String libNameTemplate = "lib" + libName + ".so";
+ File f = new File(nativeLibraryDir + libNameTemplate);
+ if (!f.exists()) {
+ Log.i(QtTAG, "Can't find '" + f.getAbsolutePath());
+ 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 + libNameTemplate);
+ } catch (Exception e) {
+
+ }
+ }
if (f.exists())
System.load(f.getAbsolutePath());
else
@@ -281,7 +296,20 @@ public class QtNative
String mainLibrary,
String nativeLibraryDir) throws Exception
{
- File f = new File(nativeLibraryDir + "lib" + mainLibrary + ".so");
+ 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 + "'");