Qt开发Android APP之微信应用

        android手机现在使用得比较普遍了,网上各种各样五花八门的应用极大地丰富了手机党们的精神生活,说到手机应用,微信可以说是当仁不让的老大,路边、公交、地铁,随处可见人们不停地用手指划拉着屏幕,刷着朋友圈,或者朋友之间以将近5赫兹的指频敲击着屏幕,互发消息,并辅以丰富多彩的表情表达此时的心情,聊得很嗨。那么作为一名刚入门的移动应用程序猿,能开发出一款和微信相关的应用来,必然是有着不小的成就感。刚好微信有向开发者提供的功能接口,学名叫作微信开放平台,在下也只是刚刚接触了解,恐有表述不严谨之处,所以在这儿不详细说了,想了解得清楚一些的看官请三百狗搜之。
        一般开发Android应用都离不开java环境和AndroidSDK,但Android开发限于java程序员这件事对C++开发者来说很不爽,于是Qt有话要说。Qt早先作为一个优秀的C++界面库为广大开发者所熟知,现在Qt已经发展为一个渗透到编程开发各个角落的应用库了,数据库、网络、多线程、Web开发,可以说你想要啥,Qt现在或将来就会有啥。
        Android应用开发,Qt当然要掺和进来,要不然跨平台怎么吹。
        闲话少聊,下面就把Qt开发Android微信应用大致的流程和一些要点介绍一遍。
        第0步:必要的准备,包括开发环境的搭建,微信应用注册等。开发环境好说,就是麻烦点。微信应用注册更简单,就是填个申请单,这里要注意的是,先要搭一个应用的架子,编译出一个可执行程序来,不能啥都没有就注册,期间还要下载一个签名工具对这个架子应用签名,再把产生成签名结果填到申请单中。然后提交申请,等待审批,说是等七个工作日,其实很快,审批通过后就得到了应用ID,日后可以用于应用程序请求微信功能的凭证。
        第1步:导入jar包,将微信开放平台提交的可供Android程序调用的java库,也就是libammsdk.jar文件拷到libs目录下,要注意,不要拷最新的版本,有可能和jdk版本不兼容,最好是把开放平台中带的例子下载下来,然后用例子中带的那个jar包。

        第2步:本步是重点,编写微信功能包装类,这时候,还是要写java代码,为啥?因为微信没有提供C++的接口。编写一个继承自QtActivity类,因为我们搭好的框架程序,这个框架就是QtActivity。我们编写它的子类,并在其中实现调用微信平台接口的方法,然后用这个子类代替QtActivity,让我们的应用变成这个子类的实例。当然了,如果你不是用Qt开发的应用程序,那就另有别论了。下面是简单的实现了发送文本到当前会话的代码:

//WeiXinWrapper.java
package org.qtproject.example.xxxx;
import com.tencent.mm.sdk.openapi.WXTextObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.SendMessageToWX;


public class WeiXinWrapper extends org.qtproject.qt5.android.bindings.QtActivity
{
    private static final String APP_ID = "wxxxxxxxxxxxxx";


    private IWXAPI api;


    public boolean regToWx()
    {
        api = WXAPIFactory.createWXAPI(this, APP_ID, false);


        boolean result = api.registerApp(APP_ID);


        return result;
    }


    private boolean sendText(String text)
    {
        WXTextObject textObj = new WXTextObject();
        textObj.text = text;
        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = textObj;
        msg.description = text;
        msg.title = text;


        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.scene = SendMessageToWX.Req.WXSceneSession;
        req.transaction = String.valueOf(System.currentTimeMillis());
        req.message = msg;


        boolean result = api.sendReq(req);


        return result;
    }
}
        写完代码还不算完,要把AndroidManifest文件中的信息改一下,把Activity节点的name属性改为该子类的名字,比如"org.qtproject.example.xxxx.WeiXinWrapper",再在bin目录下建一套目录org/qtproject/example/xxxx,最后把这个WeiXinWrapper.java文件扔进去。
        第3步,调用,Qt调用java,离不开jni调用,据说很有名,在下对java不熟悉,也就不细表了。具体到Qt来说,就是用到了一个包装类QAndroidJniObject,任何java对象都可以表示为一个QAndroidJniObject,然后围绕着这个对象有一系列的调用方法,什么静态方法、对象方法、带参方法、不带参方法、有返回类型方法以及无返回类型方法等,在下在这儿也一并略过了,无非就是一个调用前面编写的微信包装类。
        第4步,调试,没啥说的,痛苦与希望并存。
        第5步,调试通过了,编译出一个应用,装在手机里,这时,要重新生成一个签名,把这个签名替换掉一开始申请应用ID时填写的那个签名,就是登录网上的开放平台,找到我们申请的应用,把那个该死的签名替换掉。这是个坑,新手要注意,要不然,会对人生产生怀疑。
        以上就是我要说的全部,语焉不详,其实,大部分过程都可以在网上搜到其详细版本,在下笔头功夫有限,就不现了。最后祝大家编程顺利。

你可能感兴趣的:(Qt)