1 diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
2 index 0564a8d..0356f33 100644
3 --- a/java/AndroidManifest.xml
4 +++ b/java/AndroidManifest.xml
6 <?xml version='1.0' encoding='utf-8'?>
7 -<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
8 - <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name">
9 +<manifest package="org.sigrok.pulseview" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
10 + <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name" android:icon="@drawable/logo">
11 <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
12 android:name="org.qtproject.qt5.android.bindings.QtActivity"
14 <action android:name="android.intent.action.MAIN"/>
15 <category android:name="android.intent.category.LAUNCHER"/>
17 - <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
18 + <meta-data android:name="android.app.lib_name" android:value="pulseview"/>
19 <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
20 <meta-data android:name="android.app.repository" android:value="default"/>
21 <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
22 <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
23 <!-- Deploy Qt libs as part of package -->
24 - <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
25 + <meta-data android:name="android.app.bundle_local_qt_libs" android:value="0"/>
26 <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
27 <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
28 <!-- Run with local libs -->
29 - <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
30 + <meta-data android:name="android.app.use_local_qt_libs" android:value="0"/>
31 <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
32 - <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
33 - <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
34 - <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
35 + <meta-data android:name="android.app.load_local_libs" android:value="libs/libgnustl_shared.so"/>
36 + <meta-data android:name="android.app.load_local_jars" android:value=":"/>
37 + <meta-data android:name="android.app.static_init_classes" android:value=":"/>
38 <!-- Messages maps -->
39 <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
40 <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
41 diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
42 index bd6928f..68f017e 100644
43 --- a/java/res/values/strings.xml
44 +++ b/java/res/values/strings.xml
46 <?xml version='1.0' encoding='utf-8'?>
48 - <string name="app_name"><!-- %%INSERT_APP_NAME%% --></string>
49 + <string name="app_name">PulseView</string>
51 <string name="ministro_not_found_msg">Can\'t find Ministro service.\nThe application can\'t start.</string>
52 <string name="ministro_needed_msg">This application requires Ministro service. Would you like to install it?</string>
53 diff --git a/java/res/values/libs.xml b/java/res/values/libs.xml
54 --- a/java/res/values/libs.xml 2014-05-17 11:09:29.855631921 +0200
55 +++ b/java/res/values/libs.xml 2014-05-17 11:13:04.380841784 +0200
58 <array name="qt_libs">
59 <!-- %%INSERT_QT_LIBS%% -->
60 + <item>Qt5Core</item>
62 + <item>Qt5Widgets</item>
66 <array name="bundled_in_lib">
67 diff --git a/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
68 index 4ebf1f6..f4e3598 100644
69 --- a/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
70 +++ b/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
72 private void loadApplication(Bundle loaderParams)
75 + org.sigrok.androidutils.Environment.initEnvironment(
76 + getApplicationInfo().sourceDir);
77 + System.loadLibrary("gnustl_shared");
78 + org.sigrok.androidutils.LibWrangler.setupLibs(
79 + getAssets().open("liblist.txt"),
80 + new File(getApplicationInfo().nativeLibraryDir),
81 + new File(getFilesDir(), "lib"));
83 final int errorCode = loaderParams.getInt(ERROR_CODE_KEY);
85 if (errorCode == INCOMPATIBLE_MINISTRO_VERSION) {
86 diff --git a/java/src/org/sigrok/androidutils/LibWrangler.java b/java/src/org/sigrok/androidutils/LibWrangler.java
88 index 0000000..0c9effe
90 +++ b/java/src/org/sigrok/androidutils/LibWrangler.java
92 +package org.sigrok.androidutils;
94 +import java.io.InputStream;
95 +import java.io.InputStreamReader;
96 +import java.io.BufferedReader;
97 +import java.io.IOException;
100 +public final class LibWrangler
102 + protected static String stripSoVersion(String s)
104 + int p = s.lastIndexOf(".so.");
106 + s = s.substring(0, p+3);
110 + protected static void makeLink(File from, File to)
113 + if (to.equals(from.getCanonicalFile())) {
114 + // Symlink already correct
120 + Runtime.getRuntime().exec(new String[]{"ln", "-s",
121 + to.getAbsolutePath(),
122 + from.getAbsolutePath()});
125 + rc = proc.waitFor();
127 + } catch(InterruptedException ie) {
131 + throw new IOException("Failed to create symlink "+from);
134 + public static void setupLibs(BufferedReader reader, File libDir1, File libDir2)
137 + if (!libDir2.exists())
141 + while ((libname = reader.readLine()) != null) {
142 + File shlib = new File(libDir2, libname);
143 + makeLink(shlib, new File(libDir1, stripSoVersion(libname)));
144 + System.load(shlib.getAbsolutePath());
148 + public static void setupLibs(InputStream is, File libDir1, File libDir2)
151 + setupLibs(new BufferedReader(new InputStreamReader(is, "US-ASCII")),
155 diff --git a/java/src/org/sigrok/androidutils/Environment.java b/java/src/org/sigrok/androidutils/Environment.java
157 index 0000000..0c9effe
158 --- /dev/null 2014-04-15 00:13:35.543030287 +0200
159 +++ b/java/src/org/sigrok/androidutils/Environment.java 2014-04-27 00:09:23.073513663 +0200
161 +package org.sigrok.androidutils;
163 +public final class Environment
165 + static private String[] environment;
167 + public static String[] getEnvironment()
169 + return environment;
172 + public static void initEnvironment(String apkFile)
174 + environment = new String[]
177 + "PYTHONPATH", apkFile+"/assets/python3.3",
178 + "SIGROKDECODE_DIR", apkFile+"/assets/libsigrokdecode/decoders",