[sword-devel] Where does Bishop store SWORD files on Android?

Tobias Klein contact at tklein.info
Thu Jan 7 16:21:27 EST 2021


Regarding the /sdcard issues I reported with Bishop I think it is 
actually due to the changes Google introduced in API level 29 / Android 
10 (see Timmy's earlier post).

I was previously compiling my Ezra Project debug app for API level 26 
and there I didn't have issues reading/writing /sdcard.
But with API level 29 / Android 10 I also faced issues reading/writing 
/sdcard with my test app (got a permission denied message in adb logcat).

To fix that I added the following option in config.xml in the Android 
platform section:

<edit-configfile="app/src/main/AndroidManifest.xml"mode="merge"target="/manifest/application"xmlns:android="http://schemas.android.com/apk/res/android">
<applicationandroid:requestLegacyExternalStorage="true"/>
</edit-config

@Troy
Can you add that option to the Bishop configuration? I fear it otherwise 
cannot read/write /sdcard on Android 10 or later.

See also:

https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
I have not found out yet how to use the new "Scoped Storage" model in 
native code (C/C++). The thing is that Google is already creating facts 
by not supporting the "legacy model" any longer starting from Android 11:
*Caution:*After you update your app to target Android 11 (API 
level 30),the system ignores the|requestLegacyExternalStorage|attribute 
<https://developer.android.com/about/versions/11/privacy/storage#scoped-storage>when 
your app is running on Android 11 devices, so your app must be ready to 
support scoped storage and tomigrate app data 
<https://developer.android.com/training/data-storage/use-cases#migrate-legacy-storage>for 
users on those devices.
Best regards, Tobias


On 1/2/21 4:37 PM, Troy A. Griffitts wrote:
> It's not used for anything in particular, just as a write test. We 
> used to store (I guess we still do) stuff in a [globals] section like 
> a directory to scan for new module when SWORD first starts up and then 
> it would install those, letting an external program or user just dump 
> stuff to a folder, which would get install the next time their app 
> started up. That was typically used when we supported individual 
> module downloads by users from our webserver, but we discourage that 
> now and instead encourage use of installmgr.
>
> Anyway, you found exactly the problem. SWORD couldn't write to 
> /sdcard/sword.
>
> I suspect maybe file permission?
>
> We should probably all read up on the changes Timmy mentions.
>
> I would try this, remove /sdcard/sword entirely and see what Bishop does.
>
> I have had troubles myself making changes to my sdcard, using adb 
> shell to cd to /sdcard and mkdir xyz, then using a file browser and 
> looking on the sdcard and not seeing my folder. I wonder if it has 
> anything to do with the multiple profile support, i.e., can one user 
> take a photo to the sdcard and then change profiles on the phone and 
> have another user see that photo.
>
> Anyway, it seems we need to read and experiment a bit.
>
> Troy
>
> On January 2, 2021 2:49:52 AM MST, Tobias Klein <contact at tklein.info> 
> wrote:
>
>     Ok!
>
>     Below is a full dump of adb logcat | grep libsword.
>
>     Seems like this is the key section, though:
>
>     01-02 10:35:25.259  5450  5538 D libsword.so: libsword: init()
>     sword config not found, attempting to create parent of:
>     /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.260  5450  5538 D libsword.so: libsword: init()
>     saving basic: /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.260  5450  5538 D libsword.so: libsword: init()
>     sword config STILL not found, attempting to create parent of:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>     01-02 10:35:25.262  5450  5538 D libsword.so: libsword: init()
>     saving basic:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>
>     What is mods.d/globals.conf used for? It seems like this file is
>     missing in my existing SWORD file structure.
>
>     Best regards,
>     Tobias
>
>     Complete log:
>
>     01-02 10:35:25.258  5450  5538 I libsword.so: LOOKING UP LOCALE
>     DIRECTORY...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking for
>     provided SWConfig("sword.conf")...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking working
>     directory for sword.conf...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking working
>     directory for mods.conf...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking working
>     directory for mods.d...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking working
>     directory ../library/ for mods.d...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking $SWORD_PATH...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Parsing
>     /etc/sword.conf:/usr/local/etc/sword.conf...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking for
>     /etc/sword.conf...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking for
>     /usr/local/etc/sword.conf...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking
>     $ALLUSERSPROFILE/Application Data/sword/...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking
>     $HOME/Library/Application Support/Sword/...
>     01-02 10:35:25.258  5450  5538 I libsword.so: Checking home
>     directory for ~/.sword...
>     01-02 10:35:25.259  5450  5538 I libsword.so: LOOKING UP LOCALE
>     DIRECTORY COMPLETE.
>     01-02 10:35:25.259  5450  5538 I libsword.so: LOOKING UP LOCALE
>     DIRECTORY...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking for
>     provided SWConfig("sword.conf")...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking working
>     directory for sword.conf...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking working
>     directory for mods.conf...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking working
>     directory for mods.d...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking working
>     directory ../library/ for mods.d...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking $SWORD_PATH...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Parsing
>     /etc/sword.conf:/usr/local/etc/sword.conf...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking for
>     /etc/sword.conf...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking for
>     /usr/local/etc/sword.conf...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking
>     $ALLUSERSPROFILE/Application Data/sword/...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking
>     $HOME/Library/Application Support/Sword/...
>     01-02 10:35:25.259  5450  5538 I libsword.so: Checking home
>     directory for ~/.sword...
>     01-02 10:35:25.259  5450  5538 I libsword.so: LOOKING UP LOCALE
>     DIRECTORY COMPLETE.
>     01-02 10:35:25.259  5450  5538 D libsword.so: libsword: init() begin
>     01-02 10:35:25.259  5450  5538 D libsword.so: libsword: init()
>     sword config not found, attempting to create parent of:
>     /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.260  5450  5538 D libsword.so: libsword: init()
>     saving basic: /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.260  5450  5538 D libsword.so: libsword: init()
>     sword config STILL not found, attempting to create parent of:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>     01-02 10:35:25.262  5450  5538 D libsword.so: libsword: init()
>     saving basic:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>     01-02 10:35:25.263  5450  5538 D libsword.so: libsword:
>     extraConfig Exists at path:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf
>     01-02 10:35:25.263  5450  5538 D libsword.so: libsword: init()
>     creating WebMgr using path: /data/user/0/org.crosswire.bishop/files
>     01-02 10:35:25.267  5450  5538 I libsword.so: Checking at provided
>     path: /data/user/0/org.crosswire.bishop/files/...
>     01-02 10:35:25.267  5450  5538 I libsword.so: Found mods.d/
>     01-02 10:35:25.267  5450  5538 D libsword.so: libsword: WebMgr
>     c-tor(path: /data/user/0/org.crosswire.bishop/files,
>     extraConfPath:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.267  5450  5538 D libsword.so: libsword:
>     WebMgr::c-tor extraConfPath supplied:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.267  5450  5538 I libsword.so: LOADING MODULE
>     CONFIGURATIONS...
>     01-02 10:35:25.267  5450  5538 I libsword.so: LOADING MODULE
>     CONFIGURATIONS COMPLETE.
>     01-02 10:35:25.267  5450  5538 I libsword.so: LOADING MODULE
>     LIBRARY...
>     01-02 10:35:25.268  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules
>     01-02 10:35:25.268  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules extraConfig supplied:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.268  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules extraConfig exists. Augmenting modules config
>     01-02 10:35:25.269  5450  5538 D libsword.so: libsword:
>     SWMgr::createAllModules
>     01-02 10:35:25.269  5450  5538 I libsword.so: LOADING MODULE
>     LIBRARY COMPLETE.
>     01-02 10:35:25.269  5450  5538 D libsword.so: libsword: init()
>     augmenting modules from:
>     /sdcard/Android/data/net.bible.android.activity/files
>     01-02 10:35:25.269  5450  5538 D libsword.so: libsword: init()
>     augmenting modules from: /sdcard/sword
>     01-02 10:35:25.269  5450  5538 D libsword.so: libsword: init()
>     adding locales from baseDir.
>     01-02 10:35:25.269  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading
>     /data/user/0/org.crosswire.bishop/files/locales.d
>     01-02 10:35:25.269  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading
>     /data/user/0/org.crosswire.bishop/files/uilocales.d
>     01-02 10:35:25.269  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading /sdcard/sword/locales.d
>     01-02 10:35:25.269  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading /sdcard/sword/uilocales.d
>     01-02 10:35:25.269  5450  5538 D libsword.so: libsword: init() end.
>     01-02 10:35:25.413  5450  5538 D libsword.so: setting STORAGE_BASE
>     to: /data/user/0/org.crosswire.bishop/files
>     01-02 10:35:25.416  5450  5538 D libsword.so: libsword: init() begin
>     01-02 10:35:25.416  5450  5538 D libsword.so: libsword: init()
>     sword config not found, attempting to create parent of:
>     /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.417  5450  5538 D libsword.so: libsword: init()
>     saving basic: /sdcard/sword/mods.d/globals.conf
>     01-02 10:35:25.417  5450  5538 D libsword.so: libsword: init()
>     sword config STILL not found, attempting to create parent of:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>     01-02 10:35:25.417  5450  5538 D libsword.so: libsword: init()
>     saving basic:
>     /data/user/0/org.crosswire.bishop/files/mods.d/globals.conf
>     01-02 10:35:25.417  5450  5538 D libsword.so: libsword:
>     extraConfig Exists at path:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf
>     01-02 10:35:25.417  5450  5538 D libsword.so: libsword: init()
>     creating WebMgr using path: /data/user/0/org.crosswire.bishop/files
>     01-02 10:35:25.418  5450  5538 I libsword.so: Checking at provided
>     path: /data/user/0/org.crosswire.bishop/files/...
>     01-02 10:35:25.418  5450  5538 I libsword.so: Found mods.d/
>     01-02 10:35:25.418  5450  5538 D libsword.so: libsword: WebMgr
>     c-tor(path: /data/user/0/org.crosswire.bishop/files,
>     extraConfPath:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.418  5450  5538 D libsword.so: libsword:
>     WebMgr::c-tor extraConfPath supplied:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.418  5450  5538 I libsword.so: LOADING MODULE
>     CONFIGURATIONS...
>     01-02 10:35:25.419  5450  5538 I libsword.so: LOADING MODULE
>     CONFIGURATIONS COMPLETE.
>     01-02 10:35:25.419  5450  5538 I libsword.so: LOADING MODULE
>     LIBRARY...
>     01-02 10:35:25.419  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules
>     01-02 10:35:25.419  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules extraConfig supplied:
>     /data/user/0/org.crosswire.bishop/files/extraConfig.conf)
>     01-02 10:35:25.419  5450  5538 D libsword.so: libsword:
>     WebMgr::createAllModules extraConfig exists. Augmenting modules config
>     01-02 10:35:25.419  5450  5538 D libsword.so: libsword:
>     SWMgr::createAllModules
>     01-02 10:35:25.419  5450  5538 I libsword.so: LOADING MODULE
>     LIBRARY COMPLETE.
>     01-02 10:35:25.419  5450  5538 D libsword.so: libsword: init()
>     augmenting modules from:
>     /sdcard/Android/data/net.bible.android.activity/files
>     01-02 10:35:25.420  5450  5538 D libsword.so: libsword: init()
>     augmenting modules from: /sdcard/sword
>     01-02 10:35:25.420  5450  5538 D libsword.so: libsword: init()
>     adding locales from baseDir.
>     01-02 10:35:25.420  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading
>     /data/user/0/org.crosswire.bishop/files/locales.d
>     01-02 10:35:25.420  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading
>     /data/user/0/org.crosswire.bishop/files/uilocales.d
>     01-02 10:35:25.420  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading /sdcard/sword/locales.d
>     01-02 10:35:25.420  5450  5538 D libsword.so:
>     LocaleMgr::loadConfigDir loading /sdcard/sword/uilocales.d
>     01-02 10:35:25.420  5450  5538 D libsword.so: libsword: init() end.
>     01-02 10:35:25.420  5450  5538 D libsword.so: getModInfoList
>     returning 0 length array
>     01-02 10:35:25.456  5450  5538 W libsword.so: LocaleMgr::getLocale
>     failed to find locales
>     01-02 10:35:25.460  5450  5538 W libsword.so: LocaleMgr::getLocale
>     failed to find locales
>
>     On 1/1/21 10:57 PM, Troy A. Griffitts wrote:
>>     Hmmm. That's odd. If you can adb logcat your tablet while it is
>>     plugged into your laptop and have a look at the output when
>>     Bishop starts up, it might give us a clue. Bishop is pretty noisy
>>     to the logs. The detection logic is located in init(), here:
>>
>>     https://crosswire.org/svn/sword/trunk/bindings/java-jni/jni/swordstub.cpp
>>
>>
>>
>>     On January 1, 2021 2:18:29 PM MST, Tobias Klein
>>     <contact at tklein.info> wrote:
>>
>>         Thanks Troy!
>>
>>         I see this working with Bishop on my phone (Android 8.1.0).
>>         There Bishop reads from and writes to /sdcard/sword.
>>
>>         However, it is not working on my Tablet (Android 10). I do
>>         have SWORD directories there with this structure:
>>         /sdcard/sword
>>         /sdcard/sword/installMgr
>>         /sdcard/sword/mods.d
>>         /sdcard/sword/modules
>>
>>         When starting Bishop on the Tablet it asks for permissions
>>         and after confirmation it does not show any existing modules
>>         based on the structure above.
>>
>>         Best regards,
>>         Tobias
>>
>>         Am 1. Januar 2021 21:34:00 schrieb "Troy A. Griffitts"
>>         <scribe at crosswire.org>:
>>
>>>         Yes, that's exactly right. Upon install, Bishop asks for
>>>         permissions to read and right files to /sdcard/sword/. If it
>>>         is able, it does, if not, it writes to its app’s private
>>>         data area.
>>>
>>>         I don't believe there is anything like this available on
>>>         iOS, but I am no expert. I would be interested to learn how
>>>         iOS handles other common data files which have multiple apps
>>>         needing the ability to read and write, like photos.
>>>
>>>         Thanks for wanting to coordinate on where files are stored.
>>>
>>>         Troy
>>>
>>>         On January 1, 2021 1:07:16 PM MST, Tobias Klein
>>>         <contact at tklein.info> wrote:
>>>
>>>             Hi Troy!
>>>
>>>             Happy new year!
>>>
>>>             Where does Bishop store the SWORD data files on Android?
>>>             I was browsing the filesystem but could not find the
>>>             respective directory.
>>>
>>>             I am asking because I am working on Android support for
>>>             node-sword-interface and I wanted to align this and use
>>>             a common place for the SWORD data files. So far I
>>>             thought /sdcard/sword would be the right place.
>>>
>>>             Best regards,
>>>             Tobias
>>>
>>>
>>>         -- 
>>>         Sent from my Android device with K-9 Mail. Please excuse my
>>>         brevity.
>>
>>
>>     -- 
>>     Sent from my Android device with K-9 Mail. Please excuse my brevity.
>>
>>     _______________________________________________
>>     sword-devel mailing list:sword-devel at crosswire.org
>>     http://crosswire.org/mailman/listinfo/sword-devel
>>     Instructions to unsubscribe/change your settings at above page
>
>
> -- 
> Sent from my Android device with K-9 Mail. Please excuse my brevity. 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://crosswire.org/pipermail/sword-devel/attachments/20210107/3e244676/attachment-0001.html>


More information about the sword-devel mailing list