首页 > 编程源码 > 【CDK】AndLua+入门教程1

【CDK】AndLua+入门教程1

楼主:采花贼ヾ? [3级] · 2020-1-8 ·  浏览22526 · 编程源码 · ID:

首先我们先来了解AndLua+

关于AndLua+是基于开源项目lua开发的轻型脚本编程工具,使用简洁优美的lua语言,简化了繁琐的Java语句,同时支持使用大部分安卓api,免安装调试,使你在手机上开发更加轻松快捷,程序申请的权限是为了你编写程序使用,请大家放心使用。

软件的基本操作

工程结构
init.lua 工程配置文件
main,lua 工程主入口文件
layout.aly 工程默认创建的布局文件

基本功能
左箭头 撤销:撤销输入的内容
保存:保存当前文件
新建:新建lua代码文件或者aly布局文件,代码文件与布局文件文件名不可以相同
编译:把当前文件编译为luac文件,通常用不到
打开:在工程列表打开工程
打包:将当前工程编译为apk,默认使用debug签名
新建:新建一个工程
备份:将当前工程备份为AndLua+文件
编辑:编辑当前工程的属性,如 名称 权限等
格式化:重新缩进当前文件使其更加便于阅读
导入分析:分析当前文件及引用文件需要导入的java类
查错:检查当前文件是否有语法错误
布局助手:在编辑器打开aly文件时用于设计布局,目前功能尚不完善
(楼层继续更新,认证楼主✔)

━━━━━━━━━━━━━━━━━
❧━━━━━━━━━━━━━━━━
喜欢给个关注吧!路过回复一下,谢谢!
喜欢给个关注吧!路过回复一下,谢谢!
喜欢给个关注吧!路过回复一下,谢谢!
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅

快关注楼主吧,关注楼主=关注了全网精品[揪耳朵]
点击楼主头像就以关注啦!爱你呢

粉丝暴富的魔法~
  ∧_∧
(。・ω・。)つ━☆..  ・*。
  ⊂   ノ      ・゜+.
 しーJ     °。+ *´¨)
   ***      .· ´¸.·*´¨) ¸.·*¨)
         *** (¸.·´ (¸.·’*


- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者采花贼ヾ?流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/21940.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
207条回复 |  最后回复于2020-3-29

采花贼ヾ? [3级]

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()
end
activity.setContentView(loadlayout(layout))
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

Http异步网络模块

获取内容 get函数
Http.get(url,cookie,charset,header,callback)
url 网络请求的链接网址
cookie 使用的cookie,也就是服务器的身份识别信息
charset 内容编码
header 请求头
callback 请求完成后执行的函数

除了url和callback其他参数都不是必须的

回调函数接受四个参数值分别是
code 响应代码,2xx表示成功,4xx表示请求错误,5xx表示服务器错误,-1表示出错
content 内容,如果code是-1,则为出错信息
cookie 服务器返回的用户身份识别信息
header 服务器返回的头信息

向服务器发送数据 post函数
Http.post(url,data,cookie,charset,header,callback)
除了增加了一个data外,其他参数和get完全相同
data 向服务器发送的数据

下载文件 download函数
Http.download(url,path,cookie,header,callback)
参数中没有编码参数,其他同get,
path 文件保存路径

需要特别注意一点,只支持同时有127个网络请求,否则会出错

Http其实是对Http.HttpTask的封装,Http.HttpTask使用的更加通用和灵活的形式
参数格式如下
Http.HttpTask( url, String method, cookie, charset, header, callback)
所有参数都是必选,没有则传入nil

url 请求的网址
method 请求方法可以是get,post,put,delete等
cookie 身份验证信息
charset 内容编码
header 请求头
callback 回调函数

该函数返回的是一个HttpTask对象,
需要调用execute方法才可以执行,
t=Http.HttpTask(xxx)
t.execute{data}

注意调用的括号是花括号,内容可以是字符串或者byte数组,
使用这个形式可以自己封装异步上传函数
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

bmob网络数据库

b=bmob(id,key)
id 用户id,key 应用key。

b:insert(key,data,callback)
新建数据表,key 表名称,data 数据,callback 回调函数。

b:update(key,id,data,callback)
更新数据表,key 表名称id 数据id,data 数据,callback 回调函数。

b:query(key,data,callback)
查询数据表,key 表名称,data 查询规则,callback 回调函数。

b:increment(key,id,k,v,c)
原子计数,key 表名称,id 数据id,k 数据key,v 计数增加量。

b:delete(key,id,callback)
删除数据,key 表名称,id 数据id,callback 回调函数。

b:sign(user,pass,mail,callback)
注册用户,user 用户名,pass 密码,mail 电子邮箱,callback 回调函数。

b:login(user or mail,pass,callback)
登录用户,user 用户名,pass 密码,mail 电子邮箱,callback 回调函数。

b:upload(path,callback)
上传文件,path 文件路径,callback 回调函数。

b:remove(url,callback)
删除文件,url 文件路径,callback 回调函数。

注:
1,查询规则支持表或者json格式,具体用法参考官方api
2,回调函数的第一个参数为状态码,-1 出错,其他状态码参考http状态码,第二个参数为返回内容。
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

LuaUtil辅助库

copyDir(from,to)
复制文件或文件夹,from 源路径,to 目标路径。

zip(from,dir,name)
压缩文件或文件夹,from 源路径,dir 目标文件夹,name zip文件名称。

unZip(from,to)
解压文件,from zip文件路径,to 目标路径。

getFileMD5(path)
获取文件MD5值, path 文件路径。

getFileSha1(path)
获取文件Sha1值, path 文件路径。
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

LuaAdapter适配器

构建方法
adapter=LuaAdapter(activity,data,layout)
构建适配器,activity 当前活动,data 列表数据,layout 列表项目布局。
data格式为{{id=value},{id=value}}格式的数组表。

adapter.add(data)
添加数据,data 为列表项目数据,格式为{id=value}。

adapter.insert(idx,{id=value})
插入数据,idx 为从0计数的插入位置,data 为列表项目数据,格式为{id=value}。

adapter.remove(idx)
删除数据,idx 为从0计数的删除位置。

adapter.clear()
清空数据。

adapter.notifyDataSetChanged()
更新数据。

也可以使用table.insert/table.remove直接对data表操作,table库操作从1开始计数,改操作需要手动更新列表。

在使用LuaAdapter的ListView的onItemClick/onItemLongClick回调函数中,第三个参数为从0开始的项目序号,第四个参数为从1开始的项目序号。
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

部分函数参考

[a]表示参数a可选,(...)表示不定参数。函数调用在只有一个参数且参数为字符串或表时可以省略括号。
AndLua+库函数在import模块,为便于使用都是全局变量。
s 表示string类型,i 表示整数类型,n 表示浮点数或整数类型,t 表示表类型,b 表示布尔类型,o 表示Java对象类型,f为Lua函数。
--表示注释。

each(o)
参数:o 实现Iterable接口的Java对象
返回:用于Lua迭代的闭包
作用:Java集合迭代器

enum(o)
参数:o 实现Enumeration接口的Java对象
返回:用于Lua迭代的闭包
作用:Java集合迭代器

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="AndLua+",
id="tv"
}
}
main={}
activity.setContentView(loadlayout(layout,main))
print(main.tv.getText())

loadbitmap(s)
参数:s 要载入图片的地址,支持相对地址,绝对地址与网址
返回:bitmap对象
作用:载入图片
注意:载入网络图片需要在线程中进行

task(s [,...], f)
参数:s 任务中运行的代码或函数,... 任务传入参数,f 回调函数
返回:无返回值
作用:在异步线程运行Lua代码,执行完毕在主线程调用回调函数
注意:参数类型包括 布尔,数值,字符串,Java对象,不允许Lua对象
function func(a,b)
require "import"
print(a,b)
return a+b
end
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()

timer(s,i1,i2[,...])
参数:s 定时器运行的代码或函数,i1 前延时,i2 定时器间隔,... 定时器初始化参数
返回:定时器对象
作用:创建定时器重复执行函数
function f(a)
function run()
print(a)
a=a+1
end
end

t=timer(f,0,1000,1)
t.Enabled=false--暂停定时器
t.Enabled=true--重新定时器
t.stop()--停止定时器

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.createAr
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

activity部分API参考

setContentView(layout, env)
设置布局表layout为当前activity的主视图,env是保存视图ID的表,默认是_G
getLuaDir()
返回脚本当前目录
getLuaDir(name)
返回脚本当前目录的子目录
getLuaExtDir()
返回AndLua+在SD的工作目录
getLuaExtDir(name)
返回AndLua+在SD的工作目录的子目录
getWidth()
返回屏幕宽度
getHeight()
返回屏幕高度,不包括状态栏与导航栏
loadDex(path)
加载当前目录dex或jar,返回DexClassLoader
loadLib(path)
加载当前目录c模块,返回载入后模块的返回值(通常是包含模块函数的包)
registerReceiver(filter)
注册一个广播接收者,当再次调用该方法时将移除上次注册的过滤器
newActivity(req, path, enterAnim, exitAnim, arg)
打开一个新activity,运行路径为path的Lua文件,其他参数为可选,arg为表,接受脚本为变长参数
result{...}
向来源activity返回数据,在源activity的onResult回调
newTask(func[, update], callback)
新建一个Task异步任务,在线程中执行func函数,其他两个参数可选,执行结束回调callback,在任务调用update函数时在UI线程回调该函数
新建的Task在调用execute{}时通过表传入参数,在func以unpack形式接收,执行func可以返回多个值
newThread(func, arg)
新建一个线程,在线程中运行func函数,可以以表的形式传入arg,在func以unpack形式接收
新建的线程调用start()方法运行,线程为含有loop线程,在当前activity结束后自动结束loop
newTimer(func, arg)
新建一个定时器,在线程中运行func函数,可以以表的形式传入arg,在func以unpack形式接收
调用定时器的start(delay, period)开始定时器,stop()停止定时器,Enabled暂停恢复定时器,Period属性改变定时器间隔
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

布局表字符串常量

布局表支持属性字符串常量
-- android:drawingCacheQuality
auto=0,
low=1,
high=2,

-- android:importantForAccessibility
auto=0,
yes=1,
no=2,

-- android:layerType
none=0,
software=1,
hardware=2,

-- android:layoutDirection
ltr=0,
rtl=1,
inherit=2,
locale=3,

-- android:scrollbarStyle
insideOverlay=0x0,
insideInset=0x01000000,
outsideOverlay=0x02000000,
outsideInset=0x03000000,

-- android:visibility
visible=0,
invisible=1,
gone=2,

wrap_content=-2,
fill_parent=-1,
match_parent=-1,
wrap=-2,
fill=-1,
match=-1,

-- android:orientation
vertical=1,
horizontal= 0,

-- android:gravity
axis_clip = 8,
axis_pull_after = 4,
axis_pull_before = 2,
axis_specified = 1,
axis_x_shift = 0,
axis_y_shift = 4,
bottom = 80,
center = 17,
center_horizontal = 1,
center_vertical = 16,
clip_horizontal = 8,
clip_vertical = 128,
display_clip_horizontal = 16777216,
display_clip_vertical = 268435456,
--fill = 119,
fill_horizontal = 7,
fill_vertical = 112,
horizontal_gravity_mask = 7,
left = 3,
no_gravity = 0,
relative_horizontal_gravity_mask = 8388615,
relative_layout_direction = 8388608,
right = 5,
start = 8388611,
top = 48,
vertical_gravity_mask = 112,
end = 8388613,

-- android:textAlignment
inherit=0,
gravity=1,
textStart=2,
textEnd=3,
textCenter=4,
viewStart=5,
viewEnd=6,

-- android:inputType
none=0x00000000,
text=0x00000001,
textCapCharacters=0x00001001,
textCapWords=0x00002001,
textCapSentences=0x00004001,
textAutoCorrect=0x00008001,
textAutoComplete=0x00010001,
textMultiLine=0x00020001,
textImeMultiLine=0x00040001,
textNoSuggestions=0x00080001,
textUri=0x00000011,
textEmailAddress=0x00000021,
textEmailSubject=0x00000031,
textShortMessage=0x00000041,
textLongMessage=0x00000051,
textPersonName=0x00000061,
textPostalAddress=0x00000071,
textPassword=0x00000081,
textVisiblePassword=0x00000091,
textWebEditText=0x000000a1,
textFilter=0x000000b1,
textPhonetic=0x000000c1,
textWebEmailAddress=0x000000d1,
textWebPassword=0x000000e1,
number=0x00000002,
numberSigned=0x00001002,
numberDecimal=0x00002002,
n
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

Intent类介绍

Intent(意图)主要是解决Android应用的各项组件之间的通讯。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述.
Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

因此,Intent在这里起着一个媒体中介的作用
专门提供组件互相调用的相关信息
实现调用者与被调用者之间的解耦。

例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上
点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)
为了实现这个目的,listActivity需要构造一个 Intent
这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”
然后调用startActivity (Intent intent),将构造的Intent传入

系统会根据此Intent中的描述到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...

采花贼ヾ? [3级]

调用浏览器搜索关键字

import "android.content.Intent"
import "android.app.SearchManager"
intent = Intent()
intent.setAction(Intent.ACTION_WEB_SEARCH)
intent.putExtra(SearchManager.QUERY,"Alua开发手册")
activity.startActivity(intent)
发布于2020-1-9

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
46人签到
已签0天
  • 46064帖子
  • 1929690热点量
  • 182254火热值