X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-util.git;a=blobdiff_plain;f=cross-compile%2Fandroid%2Fpulseview-java.patch;fp=cross-compile%2Fandroid%2Fpulseview-java.patch;h=993f8a3c84b6fa075608e9c69b2efd4e80a6ff39;hp=0000000000000000000000000000000000000000;hb=aef0361e598870a8e2a16ff568efbae3e1ad20b9;hpb=b03a5e4895bf6bd0ae8634c139276a67df28f728 diff --git a/cross-compile/android/pulseview-java.patch b/cross-compile/android/pulseview-java.patch new file mode 100644 index 0000000..993f8a3 --- /dev/null +++ b/cross-compile/android/pulseview-java.patch @@ -0,0 +1,118 @@ +diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml +index 0564a8d..0356f33 100644 +--- a/java/AndroidManifest.xml ++++ b/java/AndroidManifest.xml +@@ -1,5 +1,5 @@ + +- ++ + + + +@@ -8,7 +8,7 @@ + + + +- ++ + + + +diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml +index bd6928f..68f017e 100644 +--- a/java/res/values/strings.xml ++++ b/java/res/values/strings.xml +@@ -1,6 +1,6 @@ + + +- ++ PulseView + 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. +diff --git a/java/src/org/kde/necessitas/origo/QtActivity.java b/java/src/org/kde/necessitas/origo/QtActivity.java +index 4ebf1f6..f4e3598 100644 +--- a/java/src/org/kde/necessitas/origo/QtActivity.java ++++ b/java/src/org/kde/necessitas/origo/QtActivity.java +@@ -108,6 +108,12 @@ public class QtActivity extends Activity + { + try + { ++ System.loadLibrary("gnustl_shared"); ++ org.sigrok.androidutils.LibWrangler.setupLibs( ++ getAssets().open("liblist.txt"), ++ new File(getApplicationInfo().nativeLibraryDir), ++ new File(getFilesDir(), "lib")); ++ + if (loaderParams.getInt(ERROR_CODE_KEY) != 0) + { // fatal error, show the error and quit + AlertDialog errorDialog = new AlertDialog.Builder(QtActivity.this).create(); +diff --git a/java/src/org/sigrok/androidutils/LibWrangler.java b/java/src/org/sigrok/androidutils/LibWrangler.java +new file mode 100644 +index 0000000..0c9effe +--- /dev/null ++++ b/java/src/org/sigrok/androidutils/LibWrangler.java +@@ -0,0 +1,63 @@ ++package org.sigrok.androidutils; ++ ++import java.io.InputStream; ++import java.io.InputStreamReader; ++import java.io.BufferedReader; ++import java.io.IOException; ++import java.io.File; ++ ++public final class LibWrangler ++{ ++ protected static String stripSoVersion(String s) ++ { ++ int p = s.lastIndexOf(".so."); ++ if (p >= 0) ++ s = s.substring(0, p+3); ++ return s; ++ } ++ ++ protected static void makeLink(File from, File to) ++ throws IOException ++ { ++ if (to.equals(from.getCanonicalFile())) { ++ // Symlink already correct ++ return; ++ } ++ from.delete(); ++ int rc; ++ Process proc = ++ Runtime.getRuntime().exec(new String[]{"ln", "-s", ++ to.getAbsolutePath(), ++ from.getAbsolutePath()}); ++ for(;;) { ++ try { ++ rc = proc.waitFor(); ++ break; ++ } catch(InterruptedException ie) { ++ } ++ } ++ if (rc != 0) ++ throw new IOException("Failed to create symlink "+from); ++ } ++ ++ public static void setupLibs(BufferedReader reader, File libDir1, File libDir2) ++ throws IOException ++ { ++ if (!libDir2.exists()) ++ libDir2.mkdir(); ++ ++ String libname; ++ while ((libname = reader.readLine()) != null) { ++ File shlib = new File(libDir2, libname); ++ makeLink(shlib, new File(libDir1, stripSoVersion(libname))); ++ System.load(shlib.getAbsolutePath()); ++ } ++ } ++ ++ public static void setupLibs(InputStream is, File libDir1, File libDir2) ++ throws IOException ++ { ++ setupLibs(new BufferedReader(new InputStreamReader(is, "US-ASCII")), ++ libDir1, libDir2); ++ } ++}