Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

String argument from Buildozer not decoded. #2905

Open
RobertFlatt opened this issue Oct 26, 2023 · 5 comments
Open

String argument from Buildozer not decoded. #2905

RobertFlatt opened this issue Oct 26, 2023 · 5 comments
Labels

Comments

@RobertFlatt
Copy link
Contributor

Checklist

  • [ x] the issue is indeed a bug and not a support request
  • [ x] issue doesn't already exist: https://github.com/kivy/python-for-android/issues
  • [x ] I have a short, runnable example that reproduces the issue
  • [ x] I reproduced the problem with the latest development version (p4a.branch = develop)
  • [ x] I used the grave accent (aka backticks) to format code or logs when appropriated

Versions

  • Python: 3.11
  • OS: WSL/Ubuntu
  • Kivy: 2.2.1
  • Cython: 0.29.33
  • OpenJDK: 17

Description

In buildozer.spec , setting:

android.extra_manifest_application_arguments = somefile.xml

Where somefile.xml contains:

android:usesCleartextTraffic="true"

results in an excaped string argument from Buildozer to p4a:

# Run ['/usr/bin/python3', '-m', 'pythonforandroid.toolchain', 'apk', '--bootstrap', 'sdl2', '--dist_name', 'oauth_gspread_example', '--name', 'OG', '--version', '0.1', '--package', 'org.reallyatest.oauth_gspread_example', '--minsdk', '21', '--ndk-api', '21', '--private', '/home/bobf/ex/oauth_gspread_example/.buildozer/android/app', '--permission', 'INTERNET', '--android-entrypoint', 'org.kivy.android.PythonActivity', '--android-apptheme', '@android:style/Theme.NoTitleBar', '--orientation', 'portrait', '--window', '--enable-androidx', '--copy-libs', '--add-source', '/home/bobf/ex/oauth_gspread_example/java', '--extra-manifest-application-arguments="android:usesCleartextTraffic=\\"true\\" "', '--arch', 'arm64-v8a', '--color=always', '--storage-dir=/home/bobf/ex/oauth_gspread_example/.buildozer/android/platform/build-arm64-v8a', '--ndk-api=21', '--ignore-setup-py', '--debug']

the key part to note is the value from somefile.xml has been quoted and escaped:

'--extra-manifest-application-arguments="android:usesCleartextTraffic=\\"true\\" "'

The value is written without interpretation to AndroidManifest.xml as an escaped string

 <application android:label="@string/app_name"
                 android:debuggable="true"
                 android:icon="@mipmap/icon"
                 android:allowBackup="true"
                 
                 "android:usesCleartextTraffic=\"true\" "
                 android:theme="@android:style/Theme.NoTitleBar"   

Gradle dies with:

AndroidManifest.xml; lineNumber: 53; columnNumber: 18; Element type "application" must be followed by either attribute specifications, ">" or "/>".

The last but one line in the AndroidManifest.xml snippet above should the same a the contents of somefile.xml

                 android:usesCleartextTraffic="true" 

Presumably, Buildozer has to quote and escape in order to pass the argument, so the issue is assumed to be a failure of the p4a parser to decode the argument.

Since we presumably know Buildozer's (quote and escape) encoding algorithm, it should be possible to successfully decode. A simpler approach might be a new p4a argument receiving the file name, and Buildozer supplying the file name.

I didn't test but this may also apply to the buildozer.spec android.extra_manifest_xml option.

@Julian-O Julian-O added the bug label Nov 20, 2023
@Snagovskiy-Denis
Copy link

I want to bump this issue. It's a small, but it's annoying and easy to fix.

@snuq
Copy link
Contributor

snuq commented Apr 21, 2024

I ran into this exact same issue trying to get this manifest permission put into my app as well... did you figure out any workaround for it?

@Snagovskiy-Denis
Copy link

did you figure out any workaround for it?

I edited the AndroidManifest.tmpl.xml file in the local/project .buildozer directory and directly put my additional manifest arguments in it.

@snuq
Copy link
Contributor

snuq commented Apr 21, 2024

did you figure out any workaround for it?

I edited the AndroidManifest.tmpl.xml file in the local/project .buildozer directory and directly put my additional manifest arguments in it.

i managed to figure out how to do this as well, not exactly easy to find this file tho! for anyone who might be coming her from a google search like i did, i found this manifest template at:

.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/<app name>/templates/AndroidManifest.tmpl.xml

@Snagovskiy-Denis
Copy link

did you figure out any workaround for it?

I edited the AndroidManifest.tmpl.xml file in the local/project .buildozer directory and directly put my additional manifest arguments in it.

i managed to figure out how to do this as well, not exactly easy to find this file tho! for anyone who might be coming her from a google search like i did, i found this manifest template at:

.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/<app name>/templates/AndroidManifest.tmpl.xml

You could just run the find -name AndroidManifest.tmpl.xml command and edit the one that applies to your app. Nevertheless, I'm glad this helped you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants