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時填寫的那個簽名,就是登錄網上的開放平臺,找到我們申請的應用,把那個該死的簽名替換掉。這是個坑,新手要注意,要不然,會對人生產生懷疑。
        以上就是我要說的全部,語焉不詳,其實,大部分過程都可以在網上搜到其詳細版本,在下筆頭功夫有限,就不現了。最後祝大家編程順利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章