Difference between Kivy and PY4A - android

I'm new to android development, and I have had some experience with Java, C#, Python, etc. Python being my favourite, I'd like to code Android app with it.
Then I saw this question:
Is there a way to run Python on Android?
The most voted answers mentioned Kivy and ASE(which is now SL4A and includes PY4A).
However, after some googling, I wasn't able to find any useful info about the difference between Kivy and PY4A. Searching for difference between Kivy and SL4A was fruitless, too.
So, as for Kivy and PY4A,
can someone explain, in easy terms:
- What are the similarity and difference between them?
- What are their good and bad parts?
- Are there any other good alternatives?

Confusingly, there are two projects called 'python for android'.
SL4A lets you run python scripts on android. Their PY4A is a step in their toolchain, but I don't know much about it. I understand there is some integration with android apis (you can use some hardware etc.), but limitations in how to run the programs (they aren't full apps, no gui etc.). This is stuff I infer from seeing other posts, I haven't tried it, don't take my word on the details. (Edit: actually it seems there is some ability to package apks and multiple ways to create a gui, I don't know the details)
Kivy is a graphical framework that supports many operating systems (linux, windows, osx, android, ios, maybe more already). You use it to build python guis. The kivy project also started their own python-for-android project which provides ways to compile the python interpreter for android and to package it as an actual android app (including java api integration with pyjnius etc.). Kivy is well integrated with it so that you can easily compile a python gui app for android, though I don't think this python-for-android is limited to kivy apps.
So, they are completely different projects that happen to have a component with the same name. SL4A is for running python scripts on android, I don't know much about its limitations or details. Kivy is a python graphical framework (not limited to android) that can be compiled via its own different python-for-android project to fully integrated gui android apps.
You can see (for instance) kivy showcase for examples of some simple kivy capabilities, or flat jewels for an example of a simple game made in kivy. These are just examples, a lot more is possible.

I've found this very useful (and recent):
Embedding Python in Android (Tutorial series)
http://techventura.wordpress.com/2014/04/21/embedding-python-in-android-series/
It describes how to embed Python in an Android app, using the Kivy-related Python-for-Android, but not Kivy itself (which isn't really described in Kivy's nor Python-for-Android's documentation, as far as I found), which is useful in various scenarios (e.g. existing Java app, using native GUI directly, etc.)
Since Kivy's Python-for-Android is more actively developed than SL4A(ASE)'s Py4A, it seems to me the way to go.
(I think it would be very relevant also, and probably more appropriate, to Is there a way to run Python on Android?, but to answer requires more reputation than I currently have.)
To the point of the original question: the most relevant difference I see between Kivy's Python-for-Android and SL4A(ASE)'s Py4A is that the latter is still today offered as "alpha quality", while the former seems to be far more active.
Of course if you take Kivy as a whole, it's a cross-platform GUI library.
Also, the results of my research on the various solutions:
Google's Py4A + SL4A(ASE) : used but alpha quality, not actively developed
Kivy:
offers Python-for-Android, to call python code from Java
offers Pyjnius, to call Java code from python
seems to be actively developed
there's the tutorial I linked above to embed into Java Android app
if interested, the cross-platform GUI (Kivy itself)
QPython:
primarily an interactive environment to launch python scripts on Android
based on Py4A, but Pyjnius (see above) is said to be usable
embedding into a Java app is available, but somewhat limited: a Python job must be started with an Intent, and results are gathered from the stdout; that means more separation that could be desirable in some scenarios, I think.
python.org: no mention at all of Android

Have you tried QPython ? It's a new python for android instance which offers more functions.

In addition to the answers here, I'd add the fork of the original Py4A which seems to be actively developed: https://github.com/kuri65536/sl4a
I can't vouch for the quality or the ease of use. There are .apks to install so it seems fairly straightforward.

Related

C++ Qt application on Android and iOS

As an experiment, I have a pure Qt C++ application (without QML) compiling (with cmake & ninja) and running on:
Windows
macOS
Linux (ubuntu and centos/redhat)
FreeBSD
It uses basically QMainWindow, QGraphicsItem and QDialog, iostream and a few C++ containers and iterators.
I am wondering if the port to Android is:
possible
easy or complex (if possible)
and if there are examples online
The same with iOS.
Yes, it is possible. I have worked in many Qt apps developed for iOS and Android. However, never used cmake, but qmake. it is good that you started experimenting using cmake which is the future as qmake is going to be deprecated sometime in the future. Qt's official documentation started adding cmake getting started tutorial.
https://doc.qt.io/qt-5/cmake-manual.html
I would like to suggest to use Qt Quick for GUI on mobile devices.
Technically, it's possible:
It's easy to compile C++-Qt applications for both Android and iOS.
For iOS, you'll still need a Mac with Xcode.
Deploying, debugging, and running the app is quite simple and seamless, too.
Practically, it's a horrible idea to try to port the GUI of a non-trivial desktop-application to mobile.
Graphical user interfaces designed to be used with a large screen, mouse and keyboard just don't work well on small touch screens.
Since you've mentioned QDialog: Some concepts work very differently on mobile compared to desktop.
E.g., Dialog is replaced by Activity and users usually don't deal with files.
You can (I've done it), however, design a Qt GUI-application without any QML, that works well on small touch screens and is at least usable on desktop.
It requires a lot of manual tweaking and hacking, but It's possible.
Notes:
qmake is easier than cmake for mobile apps (that should change in future)
although Qt has some abstractions, you'll probably need some platform-specific code (i.e., JNI, snippets of Java and Objective-C and many #ifdefs)

Run Python Code from Android

I'm writing Android app.
The problem is that it should execute some calculations and library for this is written in Python.
What is the best way to invoke Python from Android/Java?
I heard about Kivy and even managed to run application, but python code returns latex formulae, that can't be rendered within Kivy app.
You can probably render LaTeX in Kivy fairly easily using a png exporter (such as presumably exists for web export tools, and modes like emacs' preview mode).
If you need to run python as part of a java app, probably a practical way to do it is to use kivy's python-for-android tools with your own java frontend, invoking the python interpreter via JNI. This would require some thinking and experimentation but should be possible. There are also other projects for building python for android, which might be able to do the same things.

Can python build android apps?

I am learning python and i don't know that it will be helpful to me if i want to make android apps.I have read somewhere that python can make android app.But I want to ask you that is it a good option or we should always use andriod studio to make android apps because that is developed particularly for creating android apps.
I'm a core developer of Kivy, which has been mentioned in some of the other answers. I think it's the main option you have for making python apps for android, and it has both advantages and disadvantages.
The main technical disadvantages are (both in my opinion and I think the main problems I see people raise):
Startup speed: if the app isn't already running it takes a short time to spin up the python interpreter, up to a few seconds on older devices (or much longer if you code some things badly but that's avoidable), during which time a loading screen is displayed.
Lack of native look and feel: Kivy is its own opengl-based graphical framework, so it doesn't look like default android apps (it's customisable but still very hard to perfectly emulate something like that)
APK size: Because you have to package the python interpreter, the minimum apk size is about 7MB.
Ther are other potential disadvantages, such as the standard non-java problem of having to catch up the android api when it changes, but I consider these more minor issues, e.g. in this case since you can actually call much of the java api directly from python with pyjnius. I have a blog post about this. Another problem is that kivy's community is small compared to that of the java app community, though it's also quite active.
For some people, one or more of these are immediate or eventual barriers to using Kivy. For others they don't matter or are outweighed by the advantages, and for these reasons there are people using Kivy commercially on Android (and iOS). Personally I'm most interested in the wide space between 'I wrote a simple script' and 'I made a big polished android app', because I think it should be easier than it currently is to bundle simple things as simple apps, but that's just my own reason for using kivy.
If the question is,can i run python programs on android then by all means yes.
But if the intent is to create a mobile app usibg python then please look at kivy which is yet to support python 3.
But outside the love of python ,its best to stick to android studio for native android apps.
Chaquopy (https://chaquo.com/chaquopy/) is an option for Python on Android. It is a plugin for Android Studio so could include the best of both worlds - using the Android Studio interface and Gradle, with code in Python.
From the Chaquopy page:
With the Python API , you can write an app partly or entirely in Python. The complete Android API and user interface toolkit are directly at your disposal.
A in-depth review of Chaquopy is at http://blog.codelv.com/2018/02/a-look-at-chaquopy-python-sdk-for.html
The creator of Chaquopy also commented on that review with this:
I think there's room for many different approaches to Python on Android. Chaquopy focuses on giving complete access to all the features of the standard Android API and build tools. (For example, the XML layout file you mentioned was generated using Android Studio's WYSIWYG editor: it didn't have to be written by hand.) But if you want something more Pythonic, or portable to other platforms, then enaml-native or Kivy is the way to go.
CAVEAT: I have not (yet) tested this personally, so I cannot verify how well it works. It is rather complicated.
Additional: It appears to require a license key to run for more than 5 min and requires payment. If you decide to develop open source, there is an open source license which "will always be free of charge."
try kivy https://github.com/kivy/python-for-android
It can be used to create android apps.
Android doesn't come with a Python interpreter. So if you want to distribute an application written in Python, you will have to bundle a Python interpreter along with it. In other words, even a "Hello World!" app will be huge.
So yes, it's possible. But not recommended.
Yes you can using
1- Kivy library
2- install Ubuntu on a versatile machine
3- run buildozer to transfer your main.py file into APK file

kivy or something else for android UI

I am learning to program (python 3.x) and was wondering what would be best to learn for making android apps/games. I dont know anything about UI really but have heard that kivy? Is on android. Is that worth learning or should i use something else.
Thanks
Edit:
I am using sl4a and py34a on my android device.
Kivy is good, and will run on Android, but you can't make Android apps with it. It has no way of interacting with the Android API. You can run a kivy app on the device, but can not read sensors or anything like that. They have a project called pyjnius, which allows you to access Java classes from Python, but not with Python3, and it's not very easy to use unless you know Java.
You have SL4A installed, so you can use web technology to do UIs, including games, which can be rendered on the device using webviews. That said, Kivy is a much more mature and well maintained project.
I'm loving kivy. The irony is, that I found this topic here looking for help with python 3. Python 2 works perfectly, but 3 is still being made compatible. Other than that Kivy is great for beginner coders. Especially, because you don't have to code the complex stuff.

Android and Python

Can I port existing python scripts on android using SL4A or ASE ? What I specifically want to do is to create an android application with normal UI elements and run the python scripts from the application itself, get the output and display it. Is this possible ?
Personnaly I think that you ask implicitly for three points:
Compatibility Desktop/Mobile
The first is the compatibility between the python library on the phone and the python library in your computer. If you don't use third party library and be sure to include the extra python library provided by sl4a, you should generally be ok.
Packaging
The second point is about how to package a Python app for android. It can easily be done with a wrapper as well described on the sl4a website. In fact they distribute a copy of a chapter of a book about SL4A that describes how to do that. So that is possible, but bear in mind that the user will be required to install python if he hasn't done so already (this is a sort of alert at the launch of the app)
UI
The third thing that you should have in mind is that you are not a 100% free concerning the widget/layout you can use with sl4a. Namely you can't really do whatever you would be able to do in Java or Scala. So you might have to consider altering your UI and do a webview instead (that can communicate back and forth with the python) with a framework to obtain a "mobile look and feel"
Hope this helps.
I think, what you want to do is make an independently apk file, that includes the python interpret and your script code.
I don't know if this can be done in Android. The only whay I know is running your script from Android Scripting Environment.
If web interface is normal UI then look at this discussion http://groups.google.com/group/android-scripting/browse_thread/thread/f86812549d2686e2/f828f916411d7a95 . You can use Python, webView, HTML5 and JavaScript
I had a similar problem and finally solved it by writing a small singleton class in Java that runs the Python-4-Android binary from the SL4A installation in a subprocess created using java.lang.ProcessBuilder. So I'm not using the SL4A mechanisms at all (triggers, upcalls, etc), just borrowing Python.
This seems cleaner than trying to start and connect to a Python process through SL4A.
This is Python 2.7.1, cross-compiling extensions from Mac OS X Snow Leopard. My Python modules are doing only text input and output, accepting socket connections, etc. No interaction with the Android API. It all works fine: writing a Java stream to Python input and reading a Java stream to get Python output. C extensions are build using the P4A instructions . (Android could not find .so dynalibs until I added
[build_ext]
inplace=1
to setup.cfg during the build. I think this is because setup 'install' is never invoked on the Android. I'm just pushing with adb.
All the activity lifecycle states seem to be working, but I can't yet determine whether the sub-process is automatically suspended while the main process is in the stopped state.
I can post code in a couple of weeks if this is of interest. (Just departing on vacation.)
My plan for packaging is to put a ZIP archive of the Python code in /assets and have the app unzip during the first onCreate. I haven't implemented this yet, but I don't expect any problems.

Categories

Resources