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