jython android教學 - 有沒有辦法在Android上運行Python?



app開發 android執行python (21)

我已經發布了針對Android的交叉編譯Python 2.7.2的說明和補丁,您可以在我的博客中獲取它: http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/ : http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/

編輯:我已經開源Ignifuga ,我的2D遊戲引擎,它是基於Python / SDL的,它為Android進行交叉編譯。 即使你不使用它來進行遊戲,你也可以從代碼和構建器工具中獲得有用的想法(在Tim之後,你知道是誰)。

我們正在開發一個S60版本,這個平台有一個很好的Python API。

然而,Android上並沒有官方的關於Python的內容,但是由於Jython存在,是否有辦法讓蛇和機器人一起工作?


我使用QPython應用程序。 它有一個編輯器,一個控制台,你可以用它來運行你的Python程序。 該應用程序是免費的,鏈接是http://qpython.com/


一種方法是使用Kivy

開源Python庫,用於快速開發利用創新用戶界面(如多點觸控應用程序)的應用程序。

Kivy運行在Linux,Windows,OS X,Android和iOS上。 您可以在所有支持的平台上運行相同的[python]代碼。

Kivy Showcase應用程序



如果你正在尋找3.4.2或3.5.1的另一個選擇是GitHub上的這個檔案。

Python3-Android 3.4.2Python3-Android 3.5.1

它目前支持Python 3.4.2或3.5.1以及NDK的10d版本。 它也可以支持3.3和9c,11c和12

很簡單,只需下載它,運行make,即可得到.so或.a

我目前使用這個在Android設備上運行原始Python。 通過對構建文件進行幾處修改,您還可以製作x86和armeabi 64位



還有新的Android腳本環境 (ASE / SL4A)項目。 它看起來很棒,它與原生Android組件有一些整合。

注意:不再在“積極發展”下,但有些分叉可能會。


另外一個選項似乎是引用文檔的pyqtdeploy

一個與​​Qt提供的其他工具結合使用的工具可以部署使用Python v2.7或Python v3.3或更高版本編寫的PyQt4和PyQt5應用程序。 它支持部署到桌面平台(Linux,Windows和OS X)和移動平台(iOS和Android)。

根據通過pyqtdeploy和Qt5PyQt5應用程序部署到Android ,儘管很難找到有效的Android應用程序示例或者如何將所有必需的庫交叉編譯為Android的教程,但它仍在積極開發之中。 但要記住這是一個有趣的項目!


有幾種方法可以在Android上使用Python。

BeeWare是用於構建本地用戶界面的工具集合

Chaquopy是Android Studio的基於Gradle的構建系統的插件。

Kivy是一個跨平台的基於OpenGL的用戶界面工具包。

pyqtdeploy是部署PyQt應用程序的工具。

QPython是一款設備上的腳本引擎和開發環境。

最初名為ASE(Android Scripting Environment)的SL4A (用於Android的腳本層)是一組“外觀”,它揭示了一個大大簡化的Android API子集。

PySide (Qt工具包的Python綁定)對Android有一些初步的支持。

儘管An​​droid的主要編程語言是Java,但平台上沒有已知的Jython端口。 BeeWare中的Android支持是使用VOC(一種將Python源代碼編譯為Java類文件的工具)實現的。 這允許Python代碼在JVM上作為本機二進製文件執行。 https://wiki.python.org/moin/Android


在Playstore中有一個名為QPython3的應用程序,可用於編輯和運行python腳本。

Playstore鏈接

另一個名為Termux的應用程序,您可以使用命令安裝python

pkg install python

Playstore鏈接



用於AndroidPygame子集是Android平台Pygame功能子集的一個端口,該項目的目標是允許創建特定於Android的遊戲,並簡化遊戲從PC類平台到Android的移植“。

這些例子包括一個包裝在APK中的完整遊戲,這非常有趣。


在這裡沒有看到這篇文章,但是現在你可以用Pyside和Qt來完成了,因為Qt在Android上運行得益於Necessitas。

這似乎是相當混亂,但最終可能是一條可行的路線......

http://qt-project.org/wiki/PySide_for_Android_guide


還有Google員工編寫的SL4A


目前還沒有,你很幸運能夠讓Jython盡快開始工作。 如果你打算現在開始你的開發,那麼現在只需堅持使用Java就會更好。


google-opensource.blogspot.com/2009/06/…

一個例子通過馬特卡茨通過SL4A - “這是一個用六行Python代碼編寫的條形碼掃描器:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)


SL4A

SL4A做到你想要的。 您可以從他們的網站直接將它直接安裝到您的設備上,並且不需要root。

它支持一系列語言; Python是最成熟的。 默認情況下,它使用Python 2.6,但是可以使用3.2端口 。 我已經使用該端口在Galaxy S2上進行各種操作,並且工作正常。

API

SL4A為每種支持的語言提供了他們的android庫的一個端口。 該庫通過一個Android對象為底層的Android API提供接口。

import android
droid = android.Android()

# example using the text to speech facade
droid.ttsSpeak('hello world')

每種語言都有幾乎相同的API。 你甚至可以在webviews中使用JavaScript API。

var droid = new Android();
droid.ttsSpeak('hello from js');

用戶界面

對於用戶界面,您有三種選擇:

  • 您可以通過API輕鬆使用通用本機對話框和菜單。 這對確認對話和其他基本用戶輸入很有用。
  • 您也可以在Python腳本中打開一個webview,然後使用HTML5作為用戶界面。 當你使用Python中的webviews時,你可以在webview和產生它的Python進程之間來回傳遞消息。 用戶界面不會是原生的,但它仍然是一個很好的選擇。
  • 原生Android用戶界面有一些支持,但我不確定它的工作效果如何; 我從來沒有使用過它。

你可以混合選項,所以你可以有一個主界面的網頁視圖,並仍然使用本機對話。

QPython

有一個名為http://qpython.com/第三方項目。 它建立在SL4A上,並引入其他一些有用的東西。

QPython為您提供了一個更好的用戶界面來管理您的安裝,並且包含一個小的觸摸屏代碼編輯器,一個Python shell以及一個用於包管理的PIP外殼。 他們也有一個Python 3端口。 這兩個版本都可以從Play商店免費獲得。 QPython還捆綁了包括Kivy在內的Android項目上的一大堆Python庫,所以它不僅僅是SL4A。

請注意,QPython仍然在開發他們的SL4A分支(雖然說實話並不多)。 主要的SL4A項目本身幾乎已經死了。


你可以使用sl4a來運行你的Python代碼。 sl4a支持Python, PerlJRubyLua ,BeanShell,JavaScript, Tcl和shell腳本。

您可以學習sl4a Python示例



Hmmmm...

I think that you just don't see the Android app the right way. You can do something almost like what you want easily:

  • Do the app activities save/restore state like it is encouraged in the developer livecycle documentation.

  • If some login is needed at the restore stage (no login/session information available) then do it.

  • Eventually add a button/menu/timeout in which case you will do a finish() without saving the login and other session info, making implicitly the end of app session: so if the app is started/brought to front again it will start a new session.

That way you don't really care if the app is really removed from memory or not.

If you really want to remove it from memory (this is discouraged, and BTW for what purpose?) you can kill it conditionally at the end of onDestroy() with java.lang.System.exit(0) (or perhaps restartPackage(..) ?). Of course do it only in the case where you want to "really end the app", because the onDestroy() is part of the normal lifecycle of activities and not an app end at all.





android python jython ase android-scripting