|
3 | 3 | import java.io.File;
|
4 | 4 |
|
5 | 5 | import android.util.Log;
|
6 |
| - |
| 6 | +import java.util.ArrayList; |
| 7 | +import java.io.FilenameFilter; |
| 8 | +import java.util.regex.Pattern; |
7 | 9 |
|
8 | 10 | public class PythonUtil {
|
9 | 11 | private static final String TAG = "pythonutil";
|
10 | 12 |
|
11 |
| - protected static String[] getLibraries() { |
12 |
| - return new String[] { |
13 |
| - "SDL2", |
14 |
| - "SDL2_image", |
15 |
| - "SDL2_mixer", |
16 |
| - "SDL2_ttf", |
17 |
| - "python2.7", |
18 |
| - "python3.5m", |
19 |
| - "python3.6m", |
20 |
| - "main" |
21 |
| - }; |
| 13 | + protected static void addLibraryIfExists(ArrayList<String> libsList, String pattern, File libsDir) { |
| 14 | + // pattern should be the name of the lib file, without the |
| 15 | + // preceding "lib" or suffix ".so", for instance "ssl.*" will |
| 16 | + // match files of the form "libssl.*.so". |
| 17 | + File [] files = libsDir.listFiles(); |
| 18 | + |
| 19 | + pattern = "lib" + pattern + "\\.so"; |
| 20 | + Pattern p = Pattern.compile(pattern); |
| 21 | + for (int i = 0; i < files.length; ++i) { |
| 22 | + File file = files[i]; |
| 23 | + String name = file.getName(); |
| 24 | + Log.v(TAG, "Checking pattern " + pattern + " against " + name); |
| 25 | + if (p.matcher(name).matches()) { |
| 26 | + Log.v(TAG, "Pattern " + pattern + " matched file " + name); |
| 27 | + libsList.add(name.substring(3, name.length() - 3)); |
| 28 | + } |
| 29 | + } |
22 | 30 | }
|
23 | 31 |
|
24 |
| - public static void loadLibraries(File filesDir) { |
| 32 | + protected static ArrayList<String> getLibraries(File filesDir) { |
| 33 | + |
| 34 | + String libsDirPath = filesDir.getParentFile().getParentFile().getAbsolutePath() + "/lib/"; |
| 35 | + File libsDir = new File(libsDirPath); |
| 36 | + |
| 37 | + ArrayList<String> libsList = new ArrayList<String>(); |
| 38 | + addLibraryIfExists(libsList, "crystax", libsDir); |
| 39 | + addLibraryIfExists(libsList, "sqlite3", libsDir); |
| 40 | + libsList.add("SDL2"); |
| 41 | + libsList.add("SDL2_image"); |
| 42 | + libsList.add("SDL2_mixer"); |
| 43 | + libsList.add("SDL2_ttf"); |
| 44 | + addLibraryIfExists(libsList, "ssl.*", libsDir); |
| 45 | + addLibraryIfExists(libsList, "crypto.*", libsDir); |
| 46 | + libsList.add("python2.7"); |
| 47 | + libsList.add("python3.5m"); |
| 48 | + libsList.add("main"); |
| 49 | + return libsList; |
| 50 | + } |
| 51 | + |
| 52 | + public static void loadLibraries(File filesDir) { |
25 | 53 |
|
26 | 54 | String filesDirPath = filesDir.getAbsolutePath();
|
27 | 55 | boolean foundPython = false;
|
28 | 56 |
|
29 |
| - for (String lib : getLibraries()) { |
| 57 | + for (String lib : getLibraries(filesDir)) { |
30 | 58 | Log.v(TAG, "Loading library: " + lib);
|
31 | 59 | try {
|
32 | 60 | System.loadLibrary(lib);
|
@@ -66,3 +94,4 @@ public static void loadLibraries(File filesDir) {
|
66 | 94 | Log.v(TAG, "Loaded everything!");
|
67 | 95 | }
|
68 | 96 | }
|
| 97 | + |
0 commit comments