[sword-devel] Where does Bishop store SWORD files on Android?
Troy A. Griffitts
scribe at crosswire.org
Thu Jan 7 18:02:40 EST 2021
https://medium.com/androiddevelopers/android-11-storage-faq-78cefea52b7c
On 1/7/21 4:00 PM, Troy A. Griffitts wrote:
>
> Thanks Tobias, Timmy, and everyone contributing to this discussion. I
> did a quick search and this page has been helpful. It recommends
> opting out by using the requestLegacyExternalStorage options you've
> also suggested, but if I understand things correctly, it says this
> will basically make Android 10 work like Android 11 will work, so that
> sounds promising. I need to make a few small updated to Bishop and
> release a new build in the next days. I'll add the option and see if
> we do better on Android 10 and I'll try both our oldest supported
> Android 4.4 env and an Android 11 emulator to see how it goes across
> the spectrum.
>
> Thanks again for having a look into this!
>
> Troy
>
>
> On 1/7/21 2:21 PM, Tobias Klein wrote:
>>
>> 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 to migrate 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
>>>> <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.
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://crosswire.org/pipermail/sword-devel/attachments/20210107/21186610/attachment-0001.html>
More information about the sword-devel
mailing list