Android平台下使用lua调用Java代码经验总结
来源:互联网 发布:淘宝apple store旗舰店 编辑:程序博客网 时间:2024/06/06 19:03
动态语言以其运行的灵活性,可配置性,方便调试可以为开发带来极大的方便,如果用好了,可以极大的提高开发的效率。
怪不得像游戏开发这样复杂的软件开发里没有不集成脚本语言的。
其中,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)endlocal 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代码经验总结
- 手机平台下使用lua模拟器的经验总结
- 手机平台下使用lua模拟器的经验总结
- Windows平台下的C++调用Lua
- Windows平台下的C++调用Lua
- lua学习笔记 3 android调用Lua。Lua脚本使用LoadLib回调Java,并传多个参数
- lua学习笔记 3 android调用Lua。Lua脚本使用LoadLib回调Java,并传多个参数
- 在Android平台用Python调用Java代码
- Android平台下使用Ksoap2调用传递复杂对象
- Android 平台下Java与C/C++的相互调用
- Android中使用WebView调用java代码
- Android Studio平台下编写java代码示例
- 【Lua】windows下使用Cygwin+NDK编译Android平台的LuaJIT库
- Java使用JNI调用C/C++(windows和android平台)
- Android NDK 使用JNI调用java代码,通用代码封装
- Unity调用Android与IOS平台代码
- android中使用lua来写代码
- lua调用java java调用lua
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
- (Delphi中处理字符串)截取中文字符和英文字符,去除所有数字
- hybris学习笔记:New Extension
- 求字符串中满足所有字符个数相等的最长子串长度
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- Android平台下使用lua调用Java代码经验总结
- 网易新闻IOS客户端
- 矩阵构造方法汇总(结合递推)
- 【操作系统-Windows】关于win7禁用windows update
- POJ1251 Jungle Roads 【最小生成树Prim】
- 王立平--Http中Get() 与 Post()的区别?
- HDOJ 4248 A Famous Stone Collector DP
- 惠勒延迟选择实验(转)
- c/c++ 基础(四) 指针定义