Lua脚本接入Android使用JNI调用本地接口,需要注意的问题
2016-03-28 14:05
981 查看
通常android的平台接入需要使用jni来接入java接口,应该注意以下几点问题:
java接口要是静态,并且是public类型
编译的sdk配置文件proguard-project.txt中需要描述不能混淆接口代码
Lua上层接口中需要描述完整的参数接口
Lua上层接口中使用LuaBridge时参数描述
调用接口时容易出错的地方是string类型的参数,少了后面的“;”,以及无参函数,参数应该传入“{}”空数组,只有是传入参数和返回参数都为空,才可以不传后面两个参数。
java接口要是静态,并且是public类型
//获取渠道ID public static String getPackageChannelId() { return packageChannelId; }
编译的sdk配置文件proguard-project.txt中需要描述不能混淆接口代码
# If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} -keep class com.baidu.android.** { *; } -keep class com.supersdk.** { *; } -keep class com.supersdk.framework.** { *; } -keepclassmembers class org.cocos2dx.lua.AppActivity { public *; } -keepclassmembers class org.cocos2dx.lua.SuperSdkForJava { public *; }
Lua上层接口中需要描述完整的参数接口
--实现闪屏操作 function supersdk.showLogo(LogoName) local luaj = require "cocos.cocos2d.luaj" local className = "org/cocos2dx/lua/SuperSdkForJava" local args={LogoName} local sig="(Ljava/lang/String;)V" luaj.callStaticMethod(className, "showLogo",args,sig) end -- className 为完整指向调用接口的类名 -- args 为传入参数的数组,按java参数顺序放置 -- sig 为接口参数类型描述标记 -- luaj.callStaticMethod(类名,方法名,参数,参数标记)
Lua上层接口中使用LuaBridge时参数描述
-- V 代表void -- Z 代表bool -- I 代表int -- 扩充类型 LXXX; 以String举例Ljava/lang/String; 特别注意其中“;”不能省略 -- 整个参数描述结构为 (参数1参数2参数3...)返回参数
调用接口时容易出错的地方是string类型的参数,少了后面的“;”,以及无参函数,参数应该传入“{}”空数组,只有是传入参数和返回参数都为空,才可以不传后面两个参数。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager