安卓和Python

4

我可以使用SL4A或ASE将现有的Python脚本移植到Android吗?我的具体目标是创建一个带有常规UI元素的Android应用程序,并从应用程序本身运行Python脚本,获取输出并显示它。这种做法可行吗?


你想要移植哪种脚本? - lc2817
这实际上是一个文件解析器脚本。我有一个充满脚本的文件夹需要移植。因此,在应用程序中,用户应该能够通过Java UI输入输入文件,输出是解析后的文件结构。我想从Java传递运行脚本和文件的命令到Python。 - Amritha
该框架目前在Linux上运行。这应该不是问题,对吧?当加载到ASE上时,它仍然应该能够运行。 - Amritha
我该如何将包含Python源代码的压缩文件下载到Android SL4A中?我尝试过访问网站并下载,但下载总是失败。 - Amritha
你无法获取 Python 源代码,但可以获取 Python 的实现。这是一个 APK,可以从 sl4a 网站下载。 - lc2817
显示剩余2条评论
4个回答

2

个人认为您隐含地提出了三个问题:

桌面/移动兼容性

第一个问题是电话上的Python库和计算机上的Python库之间的兼容性。如果您不使用第三方库并确保包含由sl4a提供的额外 Python库,则通常应该没问题。

打包

第二个问题是如何将Python应用程序打包到Android中。可以使用封装器轻松完成,如sl4a网站上所述。实际上,他们分发了一本关于SL4A的书的一章副本,描述了如何做到这一点。因此这是可能的,但请记住,如果用户尚未安装Python,则需要安装它(这是在启动应用程序时的一种提示)

用户界面

您应该记住的第三件事是,您对可与sl4a一起使用的小部件/布局并不100%自由。也就是说,您无法像Java或Scala一样做任何您能够做的事情。因此,您可能必须考虑更改您的用户界面,并改为使用Webview(可以与Python前后通信)和框架以获得“移动外观和感觉”。

希望这有所帮助。


0

我曾经遇到过类似的问题,最终通过编写一个小型的Java单例类来解决它。该类在使用java.lang.ProcessBuilder创建的子进程中运行Python-4-Android二进制文件,而不是使用SL4A安装中的机制(触发器、回调等),只是借用了Python。

这比尝试通过SL4A启动和连接Python进程更加清晰。

这是Python 2.7.1版本,从Mac OS X Snow Leopard交叉编译扩展。我的Python模块仅进行文本输入和输出、接受套接字连接等操作,没有与Android API进行交互。一切都很顺利:将Java流写入Python输入并读取Java流以获取Python输出。C扩展使用P4A说明构建。(在我添加之前,Android找不到.so动态库)

[build_ext]
inplace=1

在构建过程中将setup.cfg添加到Android上,我认为这是因为在Android上从未调用过setup 'install'。我只是使用adb进行推送。

所有活动的生命周期状态似乎都在工作,但我还无法确定当主进程处于停止状态时,子进程是否会自动挂起。

如果有兴趣,我可以在几周后发布代码。(我现在正在度假。)

我的打包计划是将Python代码的ZIP归档放在/assets中,并在第一个onCreate期间解压缩应用程序。我尚未实施此计划,但我不认为会出现任何问题。


0

我认为,你想做的是制作一个独立的apk文件,其中包括Python解释器和你的脚本代码。

我不知道这是否可以在Android中完成。我知道的唯一方法是在Android脚本环境中运行你的脚本。


我能否将现有的Python文件下载到脚本环境中,并从我的Java应用程序中调用它们? - Amritha
Manu在说话之前可以先使用谷歌搜索一下。当然是可以做到的。Amritha,是的,你可以这样做,只要你能够用Java加载解释器。(我不确定) - lc2817
当我回答时,他没有说任何关于在Java中开发的时间。无论如何,我已经说过“我认为”,那么我应该因此被剥夺一些声望吗?我不这样认为。 - Manu

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接