我可以使用 SL4A 或 ASE 在 android 上移植现有的 python 脚本吗?我特别想做的是创建一个具有普通 UI 元素的 android 应用程序,并从应用程序本身运行 python 脚本,获取输出并显示它。这可能吗 ?
4 回答
我个人认为你含蓄地要求三点:
兼容性桌面/移动
首先是手机上的python库和你电脑上的python库的兼容性。如果你不使用第三方库,并确保包含sl4a 提供的额外python 库,你通常应该没问题。
包装
第二点是关于如何为android打包一个Python应用程序。它可以通过 sl4a 网站上描述的包装器轻松完成。事实上,他们分发了一本关于 SL4A 的书的章节副本,其中描述了如何做到这一点。所以这是可能的,但请记住,如果用户尚未安装 python,则需要安装 python(这是应用程序启动时的一种警告)
用户界面
您应该记住的第三件事是,对于可以与 sl4a 一起使用的小部件/布局,您并不是 100% 免费的。也就是说,你不能真正做你在 Java 或 Scala 中能做的任何事情。所以你可能不得不考虑改变你的 UI 并用一个框架来做一个 webview(可以与 python 来回通信)以获得“移动外观”
希望这可以帮助。
我认为,您要做的是制作一个独立的 apk 文件,其中包括 python 解释和您的脚本代码。
我不知道这是否可以在Android中完成。我知道的唯一方法是从 Android 脚本环境运行您的脚本。
如果 Web 界面是普通 UI,请查看此讨论http://groups.google.com/group/android-scripting/browse_thread/thread/f86812549d2686e2/f828f916411d7a95。您可以使用 Python、webView、HTML5 和 JavaScript
我有一个类似的问题,最后通过在 Java 中编写一个小的单例类来解决它,该类在使用 java.lang.ProcessBuilder 创建的子进程中运行来自 SL4A 安装的 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 dynalibs
[build_ext]
inplace=1
在构建期间设置.cfg。我认为这是因为在 Android 上从未调用过 setup 'install' 。我只是在推动 adb。
所有活动生命周期状态似乎都在工作,但我还无法确定在主进程处于停止状态时子进程是否自动挂起。
如果感兴趣的话,我可以在几周内发布代码。(刚去度假。)
我的打包计划是将 Python 代码的 ZIP 存档放在 /assets 中,并在第一次 onCreate 期间解压缩应用程序。我还没有实现这个,但我预计不会有任何问题。