Fix loadLibraries() failing for 64bit arch #1701
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
loadLibraries()
fails in loading native libs whenarch
isarm64-v8a
orx86_64
.Explanation
On 64-bit Android, the path obtained by
getFilesDir().getParentFile().getAbsolutePath() + "/lib"
(e.g./data/data/<package>/lib
) is not available (ref.; I did verify this on my 64-bit Android devices). For the same reason,libsDirPath
ingetLibraries()
below is resolved to a non-existent path:python-for-android/pythonforandroid/bootstraps/sdl2/build/src/main/java/org/kivy/android/PythonUtil.java
Lines 34 to 38 in e7c1117
As a result, in
addLibraryIfExists()
, aNullPointerException
is thrown atfiles.length
. (Note thatlistFiles()
returnsnull
for an invalid directory path per this ref.)python-for-android/pythonforandroid/bootstraps/sdl2/build/src/main/java/org/kivy/android/PythonUtil.java
Lines 17 to 21 in e7c1117
Although this exception is being caught, native libs (libSDL.so, libmain.so, etc.) are not loaded, so Android crashes anyway:
Fix
Use
getApplicationInfo().nativeLibraryDir
instead, which is officially documented.