學習之路漫漫,應修之期遠兮。鍥而不捨,方得始終。java
這幾日接入九遊SDK,於渾渾噩噩中成長。node
下面是步驟:android
一:下載九遊SDKweb
二:打開Android Studio新建一個工程,而且新建一個AndroidLibrary的Moudle,這裏的命名隨意。包名設置成你想設的名字。shell
三:1:把Unity中的class.jar文件放入Android Studio項目下的libs文件夾。macos
2:找到九遊sdk下的aar文件解壓,把裏面的class.jar更名爲ucgamesdk.jar,連同九遊sdk依賴庫下的alipaySdk-20160825.jar一同放入Android Studio下的libs文件夾。c#
3:而且複製aar包裏的Asserts和res文件夾放入工程中,放入位置以下圖:api
四:複製代碼到包下,新建一個你本身的啓動Activity或者直接複製。我這裏複製的是Demo中的代碼。複製完之後會有報錯,按照說明修改。把所有文件修改的沒有報錯。app
五:修改AndroidManifest文件學習
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.chen.ucsdkdemo" android:versionCode="1" android:versionName="1.0" > <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 8x新增長 --> <application android:label="@string/app_name" > <activity android:name="com.chen.ucsdkdemo.MainActivity" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="fullSensor"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> <activity android:name="cn.gundam.sdk.shell.activity.ProxyActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="adjustResize" > <intent-filter> <action android:name="cn.uc.gamesdk.sdkweb" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!-- android:taskAffinity 填上游戲的包名,如遊戲包名爲cn.uc.gamesdk.demo, 則下面填 cn.uc.gamesdk.demo.diff --> <!-- data android:scheme 裏填上」ng+當前遊戲的gameId」,如遊戲ID是123456,則填 上ng123456 --> <activity android:name="cn.uc.gamesdk.activity.PullupActivity" android:excludeFromRecents="true" android:exported="true" android:label="PullupActivity" android:launchMode="singleTop" android:taskAffinity="com.chen.ucsdkdemo.diff" android:theme="@android:style/Theme.Translucent" tools:node="replace" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="ng119474" /> </intent-filter> </activity> <!-- alipay sdk begin --> <activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" > </activity> <activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" > </activity> <activity android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" > </activity> <!-- alipay sdk end --> <!-- sdk service 1.1.3新增 --> <service android:name="cn.gundam.sdk.shell.service.ProxyService" android:exported="true" android:process=":bgservice" /> <!-- sdk service end --> </application> </manifest>
六:Build一下,打出aar包,解壓aar包,把其中的主目錄下的class.jar文件拷貝到libs文件夾下 刪除原libs文件夾下的class.jar文件(原libs下的class.jar文件爲Unity的jar包,不刪除的話會打包失敗,報重複jar錯誤。)而且把AndroidManifest文件、libs文件夾、res文件夾和Assets文件夾一併複製到Unity中的Plugins/Android文件夾下
文件目錄以下:
七:複製九遊sdkdemo中的c#代碼到Unity,而且修改其中關於代碼調用部分的包名,改成你本身的包名
八:把代碼掛在MainCamera上,打包測試,搞定。
接入過程當中有幾個坑這裏記錄一下:
1:報錯日誌:
ERROR: Unable to find method 'org.gradle.api.tasks.compile.CompileOptions.setBootClasspath(Ljava/lang/String;)V'.
Possible causes for this unexpected error include:
緣由:應該是gradle版本不對的緣由
解決:build.gradle裏面classpath 'com.android.tools.build:gradle:3.0.1 改成了3.4.1或者其餘如3.3.1 就解決了 。
2:報錯日誌:
CommandInvokationFailure: Unable to convert classes into dex format.
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/chentianliang/Documents/ResourceFile/Android/AndroidSDK/android-sdk-macosx/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -
緣由:包重複
解決:刪除aar包中libs下原Unity的jar包(class.jar)。
3: 報錯日誌:
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
緣由:這個好像是由於Gradle版本過高了
解決:Android Studio -->File-->Project Structure -->Android Gradle Plugin Version改成 3.3.1 Gradle Version 改成4.10.1 點擊ok 搞定。
4:遊戲安裝以後打不開,閃崩,連上日誌發現兩個問題:
1:AndroidManifest.xml裏面的permission 有所報錯。
2:包名調用錯誤,複製過來的代碼要修改爲本身的包名。
5:遊戲包安裝不上,安裝上之後當即被刪除:
通過排查,發現是AndroidManifest.xml裏面新增的8.x部分的permission 有問題,刪掉就行了
這個地方權限問題,我也弄不清具體爲何,等待之後慢慢排查。
這裏整個九遊sdk的接入就完成了 !