第一次接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來吧!不過公司的是有前輩封裝了一個簡單的框架,所以具體就不展示了
完整目錄結構