我可以使用SL4A或ASE将现有的Python脚本移植到Android吗?我的具体目标是创建一个带有常规UI元素的Android应用程序,并从应用程序本身运行Python脚本,获取输出并显示它。这种做法可行吗?
我可以使用SL4A或ASE将现有的Python脚本移植到Android吗?我的具体目标是创建一个带有常规UI元素的Android应用程序,并从应用程序本身运行Python脚本,获取输出并显示它。这种做法可行吗?
个人认为您隐含地提出了三个问题:
第一个问题是电话上的Python库和计算机上的Python库之间的兼容性。如果您不使用第三方库并确保包含由sl4a提供的额外 Python库,则通常应该没问题。
第二个问题是如何将Python应用程序打包到Android中。可以使用封装器轻松完成,如sl4a网站上所述。实际上,他们分发了一本关于SL4A的书的一章副本,描述了如何做到这一点。因此这是可能的,但请记住,如果用户尚未安装Python,则需要安装它(这是在启动应用程序时的一种提示)
您应该记住的第三件事是,您对可与sl4a一起使用的小部件/布局并不100%自由。也就是说,您无法像Java或Scala一样做任何您能够做的事情。因此,您可能必须考虑更改您的用户界面,并改为使用Webview(可以与Python前后通信)和框架以获得“移动外观和感觉”。
希望这有所帮助。
我曾经遇到过类似的问题,最终通过编写一个小型的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期间解压缩应用程序。我尚未实施此计划,但我不认为会出现任何问题。
我认为,你想做的是制作一个独立的apk文件,其中包括Python解释器和你的脚本代码。
我不知道这是否可以在Android中完成。我知道的唯一方法是在Android脚本环境中运行你的脚本。