Android平台下使用lua调用Java代码经验总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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代码经验总结的主要内容,如果未能解决你的问题,请参考以下文章
LuaJavaBridge - lua与java互操作的简单解决方案
lua----------------使用VS2015搭建lua开发环境的一些侥幸成功经验,
深入了解android平台的jni---本地多线程调用java代码