Android平台下使用lua调用Java代码经验总结
动态语言以其执行的灵活性,可配置性。方便调试能够为开发带来极大的方便。假设用好了。能够极大的提高开发的效率。
怪不得像游戏开发这样复杂的软件开发里没有不集成脚本语言的。
当中,lua以其小巧,灵活。方便扩展,方便嵌入被用于大多数的游戏开发中。
对于我来说。对于一个充分认识到动态的力量的人来说,在软件开发里集成一种脚本语言成为一种非常重要的非常有意义的工作。
可是在Android平台。在试过Python后,发现尽管集成也不是什么困难的事,可是感觉它还是有点大,一个动态库就有3M多,python库还得自己去裁剪,
编译也不是非常方便。所以近期把注意力渐渐的放到了lua这样的工具上。对照了下lua。尽管lua没有像Python那么纯粹,可是感觉这样的劣势反到是成了它的优势。
不得不说在Android平台上,lua比python更有用。正所谓,没有最好。仅仅有最合适。
Python在追求纯粹的同一时候,却也阻碍了它的发展。
对于每一个视效率为生命的开发者来说。方便有用才是王道。
由于这意味着能够尽快的完毕软件的开发,能够减少软件开发的风险。能够少些开发的压力,能够少熬些夜,能够多点陪女朋友的时间(哈,程序猿那有女朋友啊)。
扯远了,回到标题,看下怎样在Android平台上用luajava来使lua和java融为一体。
luajava在android平台上已经有了移植,代码能够从https://github.com/mkottman/AndroLua下载。
至于编译和把luajava增加自己的项目中,不多讲,參考AndroLua的代码就能够了。以下来关注一下怎样用lua来和android进行交互:
最简单的一个样例:
function launchSetting(context)
intent = luajava.newInstance("android.content.Intent")
c = luajava.newInstance("android.content.ComponentName","com.android.settings", "com.android.settings.Settings")
intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
intent:setComponent(c)
context:startActivity(intent)
end
该演示样例能够用来启动“设置”
一行一行来解释下:
intent = luajava.newInstance("android.content.Intent")
创建一个Intent实例:相当于Java里的 Intent intent = new Intent()
c = luajava.newInstance("android.content.ComponentName","com.android.settings", "com.android.settings.Settings")
创建一个ComponentName实例,相当于Java代码:ComponentName c = new ComponentName("com.android.settings", "com.android.settings.Settings")
intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
启动一个新的Activity实例
intent:setComponent(c)
context:startActivity(intent)
启动Activity
刚開始学lua的同学可能对"."和":"的有些陌生。这里简单解析一下,"."是用来调用类的方法,而":"是用来调用对象的方法。
请看以下这行代码:
intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
上面的代码和以下的代码相当:
intent.setFlags(intent,intent.FLAG_ACTIVITY_NEW_TASK);
假设写成:
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
就会返回错误:
Not a valid OO function call
由于第一个參数intent.FLAG_ACTIVITY_NEW_TASK不是一个对象。
再来看一个样例:
require 'import'
button_cb = {}
function button_cb.onClick(ev)
print('hello,world')
launchSetting(activity)
end
local id = luajava.bindClass("sk.kottman.androlua.R$id")
local launch = activity:findViewById(id.launchButton)
buttonProxy = luajava.createProxy("android.view.View$OnClickListener", button_cb)
launch:setOnClickListener(buttonProxy)
这个样例展示了luajava.createProxy的使用,该样例注冊了一个按扭的Click的Listener
注意下面代码:
local id = luajava.bindClass("sk.kottman.androlua.R$id")
local launch = activity:findViewById(id.launchButton)
由于id是R.java里的一个静态类,所以不能写成:sk.kottman.androlua.R.id:
另外,注意类中类的引用方法,如:
android.view.View$OnClickListener
Android平台下使用lua调用Java代码经验总结的更多相关文章
- Android的WebView通过JS调用java代码
做项目时候会遇到我们用WebView 打开一个web,希望这个web可以调用自己的一些方法,比如我们在进一个web页面,然后当我们点击web上的某个按钮时,希望能判断当前手机端是否已经登录,如果未登录 ...
- android webView开发之js调用java代码示例
1.webView设置 webView.getSettings().setJavaScriptEnabled(true);//设置支持js webView.addJavascriptInterface ...
- Android NDK开发之C调用Java及原生代码断点调试(二)
上一篇中,我们主要学习了Java调用本地方法,并列举了两大特殊实例来例证我们的论据,还没学习的伙伴必须先去阅读下,本次的学习是直接在上一篇的基础上进行了.点击:Android NDK开发之从Java与 ...
- lua调用java java调用lua[转载]
转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...
- 【转】Android平台下利用zxing实现二维码开发
http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...
- Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- lua调用java过程
在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: lo ...
- (转载)Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- Android与JNI(三) ---- c++调用java(转载)
源码下载:JniDemo JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活 ...
随机推荐
- hdoj 5249 KPI(treap)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5249 思路分析:使用queue记录管道中的值并使用treap能够查询第K大的功能查询第floor(m/ ...
- 1148 - Mad Counting(数学)
1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB M ...
- 道路软件质量:SourceMonitor
有些事情必须这样做,不是幸福,但是,缓解疼痛,因为不.更痛苦--这是无奈. 夏中义 <文心独白> 1 简介 博客没有更新了一段时间,了阿里上市的成功之处:选择和坚持.事实上人生并没有绝对的 ...
- 同一个shell下实现多个composite的切换
SWT实现面板切换可以采用StackLayout来实现,通过topControl来实现置顶,但是置顶之后要记得调用父组件的layout方法.否则会不显示,应该所有改变组件布局的情况都要进行父组件的重新 ...
- js如何判断一个对象是不是Array?(转载)
js如何判断一个对象是不是Array? 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Nu ...
- 获取图片中的文本--MODI
http://www.aspsnippets.com/Articles/Read-Extract-Text-from-Image-OCR-in-ASPNet-using-C-and-VBNet.asp ...
- UILabel显示html文本
NSString * htmlString = @"<html><body> Some html string \n <font size=\"13\ ...
- c#程序添加其他网站的webservice引用。
前言: 有A网站,B网站两个网站独立运行.某一天,需要两个网站进行合作来完成一件事,比如用A网站接收一些数据进行处理,存入中转数据库,B网站定时去取数据进入自己的系统进行处理. 可能我们会先想到在B网 ...
- 由命名空间函数而引发思考--js中的对象赋值问题
最近没有编码任务,作为一个才毕业的小辣鸡,给的任务就是看一下公司的新系统,熟悉怎么用哪些地方是干什么的. 下午喝了两杯水,感觉有点浪.然后就开始看了下代码.发现有一个函数是这样子的. var TX = ...
- 去掉word2007回车后自动编号
1. 在使用word自动编号时,回车续写上一编号内容可能会行距很宽,这时候使用shift+回车不会自动下一编号,而且是正常行距 取消回车自动编号: 打开Word文档,单击菜单栏上的[格式]→[自动套用 ...