Common Language Extension(CLE) 介绍

真是林子大了什么鸟都有啊,最近发现一个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版本开始要付费了,真是逆历史潮流而动,不过有空还是可以研究研究,这里作下记录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值