真是林子大了什么鸟都有啊,最近发现一个CLE的东东,可以支持各种编程语言之间的相互调用:

http://www.srplab.com/index.html

安卓版本支持Java调用Python代码,也支持Python调用Java代码,地址如下:

http://code.google.com/p/cle-for-android/

安卓下有个例子:

Python accesses android GUI element

This example shows how to access android java class using python directly. The example uses python script to create a button on screen and capture it's onclick event.

The python code is show as follow:

#--prepare python environment
SrvGroup=libstarpy._GetSrvGroup()
Service=SrvGroup._GetService("","")
Toast = Service._ImportRawContext("java","android/widget/Toast",True,"");
def main(activity) :
#--create absolute layout
AbsoluteLayout = Service._ImportRawContext("java","android/widget/AbsoluteLayout",True,"");
abslayout=AbsoluteLayout(activity);
activity.setContentView(abslayout);
#--create button
print(Service)
Button = Service._ImportRawContext("java","android/widget/Button",True,"");
btn1 = Button(activity);
btn1.setText("Hello World");
#--create event proxy
btnevent = Service._New();
def btnevent_onClick(self,view) :
print( view )
Toast.makeText(activity, "Is clicked", Toast.LENGTH_SHORT ).show()
btnevent.onClick = btnevent_onClick
btnevent_proxy = Service._NewRawProxy("java",btnevent,"","android.view.View$OnClickListener",0);
btn1.setOnClickListener( btnevent_proxy );
#--create layout
ViewGroup_LayoutParams = Service._ImportRawContext("java","android/view/ViewGroup$LayoutParams",True,"");
LayoutParams = Service._ImportRawContext("java","android/widget/AbsoluteLayout$LayoutParams",True,"");
#--add button to layout
lp1 = LayoutParams(ViewGroup_LayoutParams.WRAP_CONTENT,ViewGroup_LayoutParams.WRAP_CONTENT,0,100)
abslayout.addView(btn1, lp1 );

Java code:

            public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*----load test.py----*/
String pythonstring = null;
try{
AssetManager assetManager = getAssets();
InputStream dataSource = assetManager.open("test.py");
int size=dataSource.available();
byte[] buffer=new byte[size];
dataSource.read(buffer);
dataSource.close();
pythonstring=new String(buffer);
}
catch(IOException e ){
}
/*----init starcore----*/
StarCoreFactoryPath.StarCoreCoreLibraryPath = "/data/data/"+getPackageName()+"/lib";
StarCoreFactoryPath.StarCoreShareLibraryPath = "/data/data/"+getPackageName()+"/lib";
StarCoreFactory starcore= StarCoreFactory.GetFactory();
StarServiceClass Service=starcore._InitSimple("test","123",0,0);
StarSrvGroupClass SrvGroup = (StarSrvGroupClass)Service._Get("_ServiceGroup");
Service._CheckPassword(false);
/*----run python code----*/
Service._RunScript("python", pythonstring, "", "");
SrvGroup._InitRaw("python",Service);
StarObjectClass python = Service._ImportRawContext("python","",false,"");
/*---wrap activity object for python---*/
StarObjectClass activityobj = Service._New();
activityobj._AttachRawObject(this,false);
/*---call lua python function----*/
python._Call("main", activityobj);
}

我是很好奇Button的OnClickListener是怎么调用Python代码的,

只可惜从2.0版本开始要付费了,真是逆历史潮流而动,不过有空还是可以研究研究,这里作下记录。

Common Language Extension(CLE) 介绍相关推荐

  1. The Common Language Runtime (CLR)

    正文 印象 Figure 1-1. .NET Framework Figure 1-2. Common Language Runtime functions 定义 The Common Languag ...

  2. 多态和接口(3)——设计模式(1)——方法override、CLR(Common Language Runtime 公共语言运行时)、CTS(Common Type System 公共语言系统)

    1.多态就是设计模式!!!多态理解了设计模式就理解了. 2.定义坐标类,坐标类默认继承Object的ToString()方法,没有自己的特色. 3.override ToString()输出友好信息: ...

  3. Android Init Language(RC文件)介绍

    Android Init Language介绍 基本概念 什么是rc文件? Android Init进程用rc做了什么? 相关内容 Android RC文件应用 Android rc文件语法解析 Li ...

  4. Common Files文件夹介绍

    我们经常在Program Files文件夹下看到Common Files这个文件,但是大多数人不知道它是干什么用的?这里我简单的介绍一下: Common Files是应用程序运行库文件,这个文件夹是操 ...

  5. Chapter 14 Greenplum PL/R Language Extension

    Chapter 14 Greenplum PL/RLanguage Extension This chaptercontains the following information: •    Abo ...

  6. EL(Expression Language)语言介绍

    目录 一.EL语言介绍 二.EL语言基本语法 三.EL语言的操作符 Empty操作符(空值检查) 比较操作符​编辑 EL表达式运算符 四.EL内置对象 五.EL语言作用 一.EL语言介绍 EL语言是J ...

  7. Fireworks Extension —— AutoSlice 介绍

    前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...

  8. .NET Core Common Language Runtime (CoreCLR)

    此存储库包含 .NET Core运行时的完整源代码. .NET Core最好被认为是"敏捷.NET".一般来说它是一样的 Desktop .NET Framework 作为Wind ...

  9. 使用cle 调用opengl的简单例子(android)

    使用Using common language extension(cle)作为接口组件,编程能够得到很大简化.下面是一个调用opengl的例子,是从ndk example hello-gl2.修改而 ...

最新文章

  1. 贝叶斯推断方法 —— 从经验知识到推断未知
  2. hdu 5512 Pagodas
  3. spring的AOP配置之XML方式
  4. java每秒执行一次_Java性能权威指南
  5. 考研生物和计算机结合的专业,2020考研:生物医学工程,考研是考原专业还是跨专业考计算机好?...
  6. BugkuCTF-Reverse题love
  7. sap crm button_正值SAP中国成立25周年之际,江苏金来奇智能科技SAPB1项目正式启动...
  8. SpringCloud Ribbon之概述(一)
  9. android opengl es 粒子效果实例代码
  10. Tricks(七)——list of lists 行和、列和的计算
  11. Q103:磨边的物体(Beveled Objects)
  12. SpringBoot2整合Jooq和Flyway(一)
  13. c语言 camp;gt与camp;lt,那位高人告诉我怎么复习c语言二级啊?????
  14. Linux查看磁盘是否被占满,怎么查看Linux磁盘空间是否满了?
  15. ps制作哈7海报字体
  16. Linux下用dd命令测试硬盘的读写速度
  17. 无限容量还不限速的网盘,了解一下~
  18. yml文件读取方式_1
  19. axure 母版自定义触发事件的工作机制
  20. python中的标准输入设备_从MIDI设备获取输入(Python)

热门文章

  1. 电商类-仿美团页面demo
  2. LPC1768 PWM1输出PWM示例
  3. 凸包问题--旋转卡壳
  4. lol大区服务器维护,LOL官宣“扩容升级”服务器,排队时间将大大减少,电一玩家喜大普奔!...
  5. bilibili外链链接到网页
  6. Linux--gcc的基本用法
  7. 权威认可 | 悬镜云鲨RASP荣获信通院“2021金融行业年度卓越创新案例”
  8. python下求特征向量与特征值
  9. rn源码ios_携程开源RN开发框架CRN
  10. C++基础之数组和字符串