androidstudio導出jar包到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?

答:Unity返回來的那個方法是在一個線程中,所以可以使用Handler到主線程中然後進行操作。參考: http://www.cnblogs.com/wufeng0927/p/5188866.html

 

問題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必須一致否則會報錯)。

--------------------------運行收工

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