第一次接SDK踩了不少坑,分享出来,如有错误或者不足之处,希望大家理解和指出!
一. 配置android studio相关环境
出现问题可自行百度。如果以前配置过eclipce的环境要小心,android studio的环境最好用自带的相关SDK和NDK配置android studio环境。安卓环境的成功就是SDK成功的一半啊!
二. 配置沃SDK的androidManifest.xml文件
注意:沃的SDK最好要下载新的,不然会支付不成功,或者其他找不到类什么的问题,接的沃SDK版本是unipaysdk_4.1.3的任意支付,此版本的SDK缺少
android:name="com.unicom.wostore.unipay.paysecurity.PayActivity"
android:launchMode="standard"
android:exported="true"
android:configChanges="screenSize|orientation">
这些配置,会支付失败,加上即可!
跟着沃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() ;
mGLSurfaceView.onPause();函数了,当然你要处理音效的暂停之类的。此方法对于格斗游戏之类的即时性强的游戏就不适合了,切换回来可能都被打死了!
然后大致浏览下文件目录吧
SDK目录如下
黑色箭头是存放资源的,把gameSimple的资源放入到assets里面,而蓝色箭头是存放图标的,红色箭头指向就是java代码了。至于怎么写就按照demo来吧!不过公司的是有前辈封装了一个简单的框架,所以具体就不展示了