1. 程式人生 > >AndroidStudio匯入Unity步驟和遇到的一些問題

AndroidStudio匯入Unity步驟和遇到的一些問題

大家好,本人剛剛開始寫部落格,還有很多不懂,今天寫的是我將AndroidStudio專案匯入Unity的步驟和遇到的一些問題,遇到的那幾個問題有些是自己理解的,可能有錯誤,如果有人發現了,希望能指出來,謝謝大家。

這裡我先寫下我遇到的一些問題和解決方法,然後再寫將AndroidStudio的步驟。

遇到的問題:

問題1:classes.jar目錄在哪 Jar目錄:unity的安裝路徑:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar  問題2:出現如下錯誤
看上圖,沒找到AppCompat這個style,將其刪除掉即可。 ---------------但不確定為什麼找不到這個style,我猜想可能是沒有AppCompat這個jar包的原因,因為其依賴不是通過jar包的形式放進專案的,而是遠端下載的,而Unity只識別jar包。但我自己還沒去嘗試,不知道是不是這個原因。 問題3
:在Unity返回到Android的方法中為什麼無法操作主執行緒的UI?

問題4:Android中依賴了compile files('libs/okhttputils-2_6_2.jar')這個包,但為什麼在Unity中確報沒有這個包的錯誤?錯誤提示:java.lang.NoClassDefFoundError和java.lang.NoClassDefFoundError 答: 參考異常彙總第一條。 雖然直接依賴了這個包,但在lib中確沒有這個包,雖然在Android中是允許的,但在Unity中必須要Lib到這個包,否則會找不到。 1、在工程下新建lib資料夾,將需要的第三方包拷貝進來。
2、將引用的第三方包,新增進工作的build path。選中jar包->Build Path 3、(關鍵的一步)將lib設為原始檔夾。如果不設定,則程式編譯可以通過,但執行的時候,會報:選中lib資料夾->source code java.lang.NoClassDefFoundError 問題5:為什麼Android匯入unity後,利用Intent跳轉Activity確找不到這個Activity,報了ava.lang.NoClassDefFoundError和java.lang.NoClassDefFoundError這兩個錯誤? 答:參考:http://www.cnblogs.com/bicker/p/4071230.html
,我跳轉的Activity繼承自AppCompatActivity,因為繼承的類並不是jar包,而是Android直接依賴的,而Android匯入Unity後,只編譯了Lib下的jar包,而不編譯Android中的依賴,所以如果要使用AppCompatActivity則需去下載相應的jar包。 問題6:Android匯入unity後,為什麼我build出來的APK是兩個APK? 答:因為Unity的包名和Android專案的包名不同。
問題7:我一開始使用了高通AR攝像頭,然後將Android的專案匯入到unity中,此時,我將Plugins->Android中高通的Manifest刪掉了然後將Android專案的Manifest和aar匯入了進來,然後在Android上執行,執行後一直報了Vuforia初始化失敗的錯誤,如圖:
報這個錯的原因是你Android的配置清單沒有開啟Camera的許可權,因此將開啟ARCamera的許可權匯入進去即可,如果你在AndroidStudio中執行可以看到以下的日誌:
許可權如下: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
正文 a.AS工程匯入classes.jar包 Jar目錄:unity的安裝路徑:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar  b.修改MainActivity繼承自UnityPlayerActivity,並註釋掉setContentView()(如果不註釋掉,則執行Unity時顯示不了Unity的東西)
注:如果不註釋setContentView(),你也可以直接使用layout.addView()的方式將Unity佈局加到Android中 c.由於我們要讓AS打包,供Unity使用,所以要修改Gradle,雙擊build.gradle d.修改全出的地方:
application —>library  applicationId 這一行刪掉 如圖
e.由於打包後就不由Gradle來構建專案了,所以還要修改一下 AndroidManifest 和res資料夾 ,這裡修改AndroidManifest,將application中的style屬性給刪掉,因為Unity中並沒有這個東西,具體原因不知道為什麼。
<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application>
f.點選Build->Build APK
構建好後會彈出提示,點選在資料夾中顯示 
找不到的可以在專案目錄下找,以我為例: E:\AndroidExample\ExportToUnity\app\build 然後進入outputs->aar資料夾,就有打包好的檔案了,這個*.arr 是AS的打包檔案。
g.以好壓的方法開啟這個xxx.aar,進入libs下刪除掉其中的classes.jar。如果不刪掉,當匯入Unity後,會出現檔案重複的錯誤。

刪掉該jar包。 -------------------至此,AS的操作完成。
h.新建Unity,在Assets中新建Plugins->Android目錄,並將xxx.arr和AS裡的AndroidManifest放進去 
i.新建一個小場景並儲存
j.點選File –> Build Setting,選擇Android,switch platform,點選Player Setting ,修改Bundle Identifier(包名建議與AndroidStudio包名一致,否則執行後會出現兩個APK)和修改建立安卓專案時指定的最小API(API必須一致否則會報錯)。
--------------------------執行收工