AndroLua

AndroLua

Androlua是安卓平台上的用lua開發安卓程式的工具,不僅支持調用Java API,而且支持編寫安卓界面程式,還可以將自己寫的lua程式打包成apk安裝檔案安裝。lua語言的簡單使沒有任何編程經驗的用戶也能在短時間內開發出安卓程式。

基本介紹

  • 軟體名稱:AndroLua+
  • 開發商:nirenr
  • 軟體平台:Android
  • 軟體版本:2.0.1
  • 更新時間:2015.7.21
  • 軟體語言:中文
  • 軟體大小:715k
運行環境,套用類型,套用介紹,使用幫助,版本更新,

運行環境

支持Android 4.0+

套用類型

開發工具

套用介紹

Androlua1.0是Github上一個開源項目,該版本只支持運行簡單的lua代碼。國區域網路友,將它在原來的基礎上進行改進,不僅支持創建安卓視窗程式,而且將它的運行速度翻了幾翻,並集成了常用模組import,http,bson,xml,socket,zlib等等,使調用更加方便。不僅如此,最新的Androlua有支持高亮和關鍵字提示的文本編輯器,更值得高興的是Androlua還支持將lua程式打包成apk。Androlua自帶有幫助文檔,可以使使用者快速上手。Androlua軟體已更名為Androlua+,最新軟體的版本為2.0.1,Androlua+可以在各大套用市場下載得到。

使用幫助

1,導入模組
在每個腳本程式的開頭應該寫上 require "import" 以導入import模組,簡化寫代碼的難度。程式內置bson,canvas,cjson,ftp,gl,http,import,md5,smtp,socket,sensor.so,xml,zlib
2,導入包或類
可以導入包或者類
import "android.widget.*"
import "android.widget.Button"
導入內部類
import "android.view.View_*"

import "android.view.View_OnClickListener"

View.OnClickListene
包名和類名必須用引號包圍。

3,創建布局與組件
layout=LinearLayout(activity)activity.setContentView(layout)button=Button(activity)layout.addView(button)

注.activity是當前視窗的Context對象,如果習慣寫this只需要
this=activitybutton=Button(this)
4,使用方法(method)
button.setText("按鈕")
5,使用事件(event)
創建事件處理函式
function click(s)
print("點擊")
end
把函式添加到事件接口
listener=View.OnClickListener{onClick = click}
把接口註冊到組件
button.setOnClickListener(listener)
也可以使用匿名函式
button.setOnClickListener(View.OnClickListener {onClick = function(s)
print("點擊")
end
})

6,回調方法
function onResume()print("返回程式")endfunction onDestroy()print("程式已退出")endfunction onCreateOptionsMenu(menu)menu.add("選單")end

支持onCreate,onStart,onResume,onPause,onStop,onDestroy,onActivityResult,onCreateOptionsMenu,onCreateContextMenu,onMenuItemSelected
7,按鍵與觸控
function onKeyDown(code,event)print(code event)endfunction onTouchEvent(event)print(event)end

支持onKeyDown,onKeyUp,onKeyLongPress,onTouchEvent
函式必須返布爾值
8,使用數組
 array=float{1,2,3}

或者
 array=int[10] a=array[0] array[0]=4 
9,使用執行緒
需導入import模組,參看thread與task函式說明
任務
task(str,args,callback)

str 為任務執行代碼,args 為參數,callback 為回調函式,任務返回值將傳遞到回調方法
執行緒
t=thread(str,args)

str 為執行緒中執行的代碼,args 為初始傳入參數
調用執行緒中方法
call(t,fn,args)

t 為執行緒,fn 為方法名稱,args 為參數
設定執行緒變數
set(t,fn,arg)

t 為執行緒,fn 為變數名稱,arg 為變數值
執行緒調用主執行緒中方法
call(fn,args)

fn 為方法名稱,args 為參數
執行緒設定主執行緒變數
set(fn,arg)

fn 為變數名稱,arg 為變數值
注. 參數類型為 字元串,數值,Java對象,布爾值與nil
執行緒要使用quit結束執行緒。
10,使用布局表
使用布局表須導入android.view與android.widget包。
require "import"
import "android.widget.*"
import "android.view.*"
布局表格式
layout={
控制項名稱,
id=控制項名稱,
屬性=值,
{
子控制項名稱,
id=控制項名稱,
屬性=值,
}
}
布局表支持大全部安卓控制項屬性,
與安卓XML布局檔案的不同點:
id表示在Lua中變數的名稱,而不是安卓的可以findbyid的數字id。
ImageView的src屬性是當前目錄圖片名稱或絕對檔案路徑圖片或網路上的圖片,
layout_width與layout_height的值支持fill與wrap簡寫,
onClick值為lua函式或java onClick接口或他們的全局變數名稱,
背景background支持背景圖片,背景色與LuaDrawable自繪製背景,背景圖片參數為是當前目錄圖片名稱或絕對檔案路徑圖片或網路上的圖片,顏色同backgroundColor,自繪製背景參數為繪製函式或繪製函式的全局變數名稱,
繪製函式形式
 function draw(canvas,paint) canvas.drawRect(1,1,100,100,paint) end

控制項背景色使用backgroundColor設定,值為"#十六進制顏色值"。
其他參考loadlayout與loadbitmap
11,繪圖(canvas)
require "import"import "android.app.*"import "android.os.*"import "android.widget.*"import "android.view.*"import "android.graphics.*"activity.setTitle('AndroLua')paint=Paint()paint.setARGB(100,0,250,0)paint.setStrokeWidth(20)paint.setTextSize(28)sureface = SurfaceView(activity);callback=SurfaceHolder_Callback{surfaceChanged=function(holder,format,width,height)end,surfaceCreated=function(holder)ca=holder.lockCanvas()if (ca~=nil) thenca.drawRGB(0,79,90);ca.drawRect(0,0,200,300,paint)endholder.unlockCanvasAndPost(ca)end,surfaceDestroyed=function(holder)end}holder=sureface.getHolder()holder.addCallback(callback)activity.setContentView(sureface)

12,部分模組使用說明
(1) canvas模組
require "import"import "canvas"import "android.app.*"import "android.os.*"import "android.widget.*"import "android.view.*"import "android.graphics.*"activity.setTitle('AndroLua')paint=Paint()paint.setARGB(100,0,250,0)paint.setStrokeWidth(20)paint.setTextSize(28)sureface = SurfaceView(activity);callback=SurfaceHolder_Callback{surfaceChanged=function(holder,format,width,height)end,surfaceCreated=function(holder)ca=canvas.lockCanvas(holder)if (ca~=nil) thenca:drawRGB(0,79,90)ca:drawRect(0,0,200,300,paint)endcanvas.unlockCanvasAndPost(holder,ca)end,surfaceDestroyed=function(holder)end}holder=sureface.getHolder()holder.addCallback(callback)activity.setContentView(sureface)

(2) OpenGL模組
require "import"import "gl"import "android.app.*"import "android.os.*"import "android.widget.*"import "android.view.*"import "android.opengl.*"activity.setTitle('AndroLua')--activity.setTheme( android.R.style.Theme_Holo_Light_NoActionBar_Fullscreen)mTriangleData ={0.0, 0.6, 0.0,-0.6, 0.0, 0.0,0.6, 0.0, 0.0,};mTriangleColor = {1, 0, 0, 0,0, 1, 0, 0,0, 0, 1, 0,};sr=GLSurfaceView.Renderer{onSurfaceCreated=function(gl2, config)gl.glDisable(gl.GL_DITHER);gl.glHint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_FASTEST);gl.glClearColor(0, 0, 0, 0);gl.glShadeModel(gl.GL_SMOOTH);gl.glClearDepth(1.0)gl.glEnable(gl.GL_DEPTH_TEST);gl.glDepthFunc(gl.GL_LEQUAL);end,onDrawFrame=function(gl2, config)gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);gl.glMatrixMode(gl.GL_MODELVIEW);gl.glLoadIdentity();gl.glRotate(0,1,1,1)gl.glTranslate(0, 0,0);gl.glEnableClientState(gl.GL_VERTEX_ARRAY);gl.glEnableClientState(gl.GL_COLOR_ARRAY);gl.glVertexPointer( mTriangleData,3);gl.glColorPointer(mTriangleColor,4);gl.glDrawArrays( gl.GL_TRIANGLE_STRIP , 0, 3);gl.glFinish();gl.glDisableClientState(gl.GL_VERTEX_ARRAY);gl.glDisableClientState(gl.GL_COLOR_ARRAY);end,onSurfaceChanged= function (gl2, w, h)gl.glViewport(0, 0, w, h);gl.glLoadIdentity();ratio = w / h;gl.glFrustum(-rautio, ratio, -1, 1, 1, 10);end}glSurefaceView = GLSurfaceView(activity);glSurefaceView.setRenderer(sr);activity.setContentView(glSurefaceView);

(3) http模組
body,cookie,code,headers=http.get(url [,cookie])body,cookie,code,headers=http.post(url ,postdata [,cookie])

(4) import模組
require "import"import "android.widget.*"import "android.view.*"layout={LinearLayout,orientation="vertical",{EditText,id="edit",layout_width="fill"},{Button,text="按鈕",layout_width="fill",onClick="click"}}function click()Toast.makeText(activity, edit.getText().toString(), Toast.LENGTH_SHORT ).show()endactivity.setContentView(loadlayout(layout))

關於打包
新建工程或在腳本目錄新建init.lua檔案。
寫入以下內容,即可將資料夾下所有lua檔案打包,main.lua為程式人口。
appname="demo"
appver="1.0"
packagename="com.androlua.demo"
目錄下icon.png替換圖示,welcome.png替換啟動圖。
沒有int.lua檔案打包當前檔案。
打包使用debug簽名。
AndroLua+部分函式參考
[a]表示參數a可選,(...)表示不定參數。函式調用在只有一個參數且參數為字元串或表時可以省略括弧。
AndroLua庫函式在import模組,為便於使用都是全局變數。
s 表示string類型,i 表示整數類型,n 表示浮點數或整數類型,t 表示表類型,b 表示布爾類型,o 表示Java對象類型,f為Lua函式。
--表示注釋。
import(s)
參數:s 要載入的包或類的名稱
返回:載入的類或模組
作用:載入包或類或Lua模組
import "http" --載入http模組import "android.widget.*" --載入android.widget包import "android.widget.Button" --載入android.widget.Button類import "android.view.View$OnClickListener" --載入android.view.View.OnClickListener內部類  loadlayout(t [,t2]) 

參數:t 要載入的布局表,t2 保存view的表
返回:布局最外層view
作用:載入布局表,生成view
layout={LinearLayout,layout_width="fill",{TextView,text="Androlua",id="tv"}}main={}activity.setContentView(loadlayout(layout,lay))print(main.tv.getText())

loadbitmap(s)
參數:s 要載入圖片的地址,支持相對地址,絕對地址與網址
返回:bitmap對象
作用:載入圖片
注意:載入網路圖片需要線上程中進行
task(s [,...], f)
參數:s 任務中運行的代碼,... 傳入參數,f 回調函式
返回:無返回值
作用:在異步執行緒運行Lua代碼,執行完畢在主執行緒調用回調函式
注意:參數類型包括 布爾,數值,字元串,Java對象,不允許Lua對象
func=[[require "import"a,b=...print(a,b)return a+b]]task(func,1,2,print)

thread(s[,...])
參數:s 執行緒中運行的lua代碼或腳本的相對路徑(不加擴展名),... 傳入參數
返回:返回執行緒對象
作用:開啟一個執行緒運行Lua代碼
注意:執行緒需要調用quit方法結束執行緒
func=[[a,b=...function add()call("print",a+b)end]]t=thread(func,1,2)t.add()

new_env()
參數:無
返回:一個繼承了import模組函式的環境表
作用:產生一個繼承import模組函式的環境表
function foo()local _ENV=new_env()import "android.widget.*"b=Button(activity)end
luajava.bindClass(s)
參數:s class的完整名稱,支持基本類型
返回:Java class對象
作用:載入Java class
Button=luajava.bindClass("android.widget.Button")int=luajava.bindClass("int")

luajava.createProxy(s,t)
參數:s 接口的完整名稱,t 接口函式表
返回:Java接口對象
作用:創建Java接口
onclick=luajava.createProxy("android.view.View$OnClickListener",{onClick=function(v)print(v)end})

luajava.createArray(s,t)
參數:s 類的完整名稱,支持基本類型,t 要轉化為Java數組的表
返回:創建的Java數組對象
作用:創建Java數組
arr=luajava.createArray("int",{1,2,3,4})

luajava.newInstance(s [,...])
參數:s 類的完整名稱,... 構建方法的參數
作用:創建Java類的實例
b=luajava.newInstance("android.widget.Button",activity)

luajava.new(o[,...])
參數:o Java類對象,... 參數
返回:類的實例或數組對象或接口對象
作用:創建一個類實例或數組對象或接口對象
注意:當只有一個參數且為表類型時,如果類對象為interface創建接口,為class創建數組,參數為其他情況創建實例
b=luajava.new(Button,activity)onclick=luajava.new(OnClickListener,{onClick=function(v)print(v)end})arr=luajava.new(int,{1,2,3})

(示例中假設已載入相關類)
luajava.coding(s [,s2 [, s3]])
參數:s 要轉換編碼的Lua字元串,s2 字元串的原始編碼,s3 字元串的目標編碼
返回:轉碼後的Lua字元串
作用:轉換字元串編碼
注意:默認進行GBKUTF8
luajava.clear(o)
參數:o Java對象
返回:無
作用:銷毀Java對象
注意:儘量避免使用此函式,除非確認不在使用此對象,且該對象比較大

版本更新

2.0.1 一些錯誤的修復,簡化了Java Getter和Setter的調用。
2.0 更名為Androlua+,支持打包,運行速率提升,支持調用Java方法,集成大量模組,集成更好用的高亮和關鍵字提示的編輯器,支持創建工程,使用lua表作為套用界面布局,集成幫助文檔,支持異步任務。使用lua5.3核心,支持位運算。
1.0 支持運行簡單的lua程式

相關詞條

熱門詞條

聯絡我們