用Android studio搭建沃商店SDK任意支付的配置

第一次接SDK踩了不少坑,分享出來,如有錯誤或者不足之處,希望大家理解和指出!


一.    配置android studio相關環境

出現問題可自行百度。如果以前配置過eclipce的環境要小心,android studio的環境最好用自帶的相關SDK和NDK配置android studio環境。安卓環境的成功就是SDK成功的一半啊!

 

二.   配置沃SDK的androidManifest.xml文件

注意:沃的SDK最好要下載新的,不然會支付不成功,或者其他找不到類什麼的問題,接的沃SDK版本是unipaysdk_4.1.3的任意支付,此版本的SDK缺少

<activity
    android:name="com.unicom.wostore.unipay.paysecurity.PayActivity"
    android:launchMode="standard"
    android:exported="true"
    android:configChanges="screenSize|orientation">
</activity>
這些配置,會支付失敗,加上即可!

跟着沃SDK自帶的gameSimple的manifest.xml文件來,替換成相應的即可。如果遇到首行的package等出錯可以先把package,versionCode,versionName註釋掉,這裏涉及到命名相關會在build.gradle裏面做處理的,如果不註釋掉,點擊該頁的下方Merged Manifest裏面可以查看錯誤,然後看看怎麼處理吧!

 

三.  配置build.gradle

工程中有2個build.gradle,一個在app內部,一個在外部。

1.    app外部的build.gradle文件。如果提示Could not find method android() for arguments xxxxx等等一堆,就把全部註釋掉,因爲會在app的內部build.gradle文件裏面配置它。

2.    注意紅色箭頭的這個


版本如果陳舊了可能會提示一大堆AGPBI: {"kind":"errror","text":"warning:xxxx等等信息,這個是在打包到手機的時候會出現,如果能打包可以不管,影響了打包就要升級了。

3.    app內部的build.gradle文件。上半部分大概這樣子

從上往下依次是,你的密匙文件,這個不明白的可以百度。然後是sdk版本,最好是多安裝幾個,畢竟測試手機系統都不會太新,

順着黑色的箭頭,點擊下載按鈕

大概這樣子,勾選你要下載的版本然後下載。如果已經下載的版本點擊藍色的勾勾,好像會刪除你安裝的版本。compileSdkVersion是設置編譯時用的安卓版本,buildToolsVersion是設置編譯時的使用的構建工具版本。然後再看黑色箭頭部分,這個是默認配置,其實可以不用寫uniplay的名字,後面會提到。uniplay就是我命名的沃商店的名字。然後看白色箭頭在abiFilters中導入.so文件。黃色箭頭也是AGPBI: {"kind":"errror","text":"warning:xxxx等等信息,導致打包的時候出現問題加上的。中間部分


寫上uniplay的配置,dirs對應的libs就是存放庫的地方(只是存放並沒有導入)。


最後的就是導庫了。由於jar包都是放在libs裏面的,如果遇到同名的jar包直接改名字,然後在導入的地方改成同名就行了。build的後面部分

如果是通用的就直接compile files(“xxxx.jar”),是某一個SDK用的庫就得在compile前面加上包的名字了。

如果是爲了以後升級SDK方便不出問題,那麼就得在當前的沃文件下面新建libs來裝庫了,那樣改加載路徑就行了,達到各自管理各自庫目的,互不干擾!

然後如果是多渠道的調試,怎麼也得來個啓動項吧!看這兒

點開後會看到

再次點開


選擇debug,如果沒錯就可以調試輸出了!

當然如果遇到這種情況

檢查你的這個,把版本升高或者clear build大法,刪除 .gradle 重啓什麼的!最好的方式是,查看SKD的demo是好多,照寫試試!


然後可能新坑來了,對於是android7.0的系統。點擊遊戲最後發現可能出現一下錯誤

你的.so文件動態加載出錯了,在你的繼承unicomapplicationwrapper中新增.so的加載方式

@Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    protected void attachBaseContext(Context context) {
        if (mApplication == null) {
            File cache = null;
            File wechart_cache =null;
            File qq_cache=null;
            try {
                InputStream is = context.getAssets().open("libme_unipay.so");
                cache = new File(context.getFilesDir(),"libme_unipay.so");

                InputStream wechart_is = context.getAssets().open("libonlywechat_plugin.so");
                wechart_cache = new File(context.getFilesDir(),"libonlywechat_plugin.so");//

                InputStream qq_is = context.getAssets().open("libonlyqq_plugin.so");
                qq_cache = new File(context.getFilesDir(),"libonlyqq_plugin.so");//

                if (!cache.exists()) {
                    cache.createNewFile();
                }
                if (!wechart_cache.exists()) {
                    wechart_cache.createNewFile();
                }
                if (!qq_cache.exists()) {
                    qq_cache.createNewFile();
                }

                FileOutputStream fos = new FileOutputStream(cache);
                int length = 0;
                byte[] buffer = new byte[8192];
                while ((length = is.read(buffer)) > 0) {
                    fos.write(buffer, 0, length);
                }
                fos.flush();
                fos.close();
                is.close();

                fos = new FileOutputStream(wechart_cache);
                length = 0;
                buffer = new byte[8192];
                while ((length = wechart_is.read(buffer)) > 0) {
                    fos.write(buffer, 0, length);
                }
                fos.flush();
                fos.close();
                wechart_is.close();

                fos = new FileOutputStream(qq_cache);
                length = 0;
                buffer = new byte[8192];
                while ((length = qq_is.read(buffer)) > 0) {
                    fos.write(buffer, 0, length);
                }
                fos.flush();
                fos.close();
                qq_is.close();


            } catch (IOException e) {
                e.printStackTrace();
            }
            if (cache != null) {
                System.load(cache.getAbsolutePath());
                unipay.install_native(this, context, context.getPackageName(), context.getApplicationInfo().sourceDir, "unipay", "unicom_classez.jar");
            }
            if(wechart_cache!=null)
            {
                System.load(wechart_cache.getAbsolutePath());
            }
            if(qq_cache!=null)
            {
                System.load(qq_cache.getAbsolutePath());
            }
            this.loadApplication(context);
        }
        super.attachBaseContext(context);

    }
然後把.so文件從armeabi文件拷貝到當前sdk文件目錄下的assets文件目錄下,這樣差不多就能運行起來了。

 之後又後發現導航欄遮擋遊戲邊緣了,好吧7.0的系統對導航欄改動有點大。

View decorView = getWindow().getDecorView();
int uiOptions =
View.SYSTEM_UI_FLAG_FULLSCREEN|
View.INVISIBLE;
decorView.setSystemUiVisibility(uiOptions);

改動了下設置方式,可以全屏了!但是遊戲畫布被縮小了,之後經過多次實驗發現,進入遊戲之前把導航欄手動關閉,遊戲就是滿蕩蕩的全屏,目前就只有這樣了!希望有老鐵去研究下。

正常進入遊戲後,點擊主頁按鈕,然後返回遊戲,發現遊戲黑屏了!或者是去充值跳轉回來也黑屏了!驚恐。經過各種折磨後發現,點擊回到遊戲後並沒有調用cocos2dxActivity的onResume()函數,.........罵人!然後我就想了個不是辦法的辦法,在調用onPause()函數的裏面加個函數判斷

String version=android.os.Build.VERSION.RELEASE;
if(instance.getChanelId().equals("103")&&Integer.parseInt(version.substring(0,1))>6)
{
    
    Cocos2dxHelper.pauseBackgroundMusic();
Cocos2dxHelper.pauseAllEffects();
  Log.e("third","目前沃商店的處理,不暫停遊戲"); return false;
}
return true;
如果是沃渠道103且版本大於6,就不執行
mGLSurfaceView.onPause();
函數了,當然你要處理音效的暫停之類的。此方法對於格鬥遊戲之類的即時性強的遊戲就不適合了,切換回來可能都被打死了!


然後大致瀏覽下文件目錄吧
SDK目錄如下


黑色箭頭是存放資源的,把gameSimple的資源放入到assets裏面,而藍色箭頭是存放圖標的,紅色箭頭指向就是java代碼了。至於怎麼寫就按照demo來吧!不過公司的是有前輩封裝了一個簡單的框架,所以具體就不展示了

完整目錄結構





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