乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android:AS與Unity3D之間打包的各種坑及解決方案

       小飛苑 2017-02-22

      【轉(zhuǎn)載請(qǐng)注明出處】
      作者:DrkCore (http://blog.csdn.net/DrkCore)
      原文鏈接:(http://blog.csdn.net/drkcore/article/details/52079371)



      近日因?yàn)楣ぷ鞯脑蚬P者開始接觸Unity3D游戲引擎,該引擎的一大特色就是支持多種平臺(tái),其中自然不能少了我們Android。在Unity3D和Android Studio交互中其實(shí)有不少坑,不過踩坑向來是學(xué)習(xí)的一部分,在這里筆者和大家分享一下今天的踩坑經(jīng)驗(yàn)。


      一、 將項(xiàng)目作為lib導(dǎo)入U(xiǎn)nity打包

      Eclipse的時(shí)代說到打包那必然指的是JAR包,其缺點(diǎn)是res資源文件不好處理,而隨著Android Studio一同到來的AAR包解決了這個(gè)問題。

      將源碼和資源文件一同打包等到實(shí)際編譯的時(shí)候再解壓,這些事情Build Tool都幫我們做了,這也是為什么Android Studio中我們只需一句話就能搞定依賴管理。在Unity3D工程中我們同樣能夠通過AAR來導(dǎo)入Android部分的邏輯。

      基本的導(dǎo)出姿勢(shì)以及與Unity3D之間的交互可以參照這位博主的博客:
      Android Studio 2.1 和 Unity3D 5.3.4 交互
      Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

      博文介紹了如何導(dǎo)出AAR,但是在你真正將自己的項(xiàng)目移植的時(shí)候你仍然會(huì)遇到不少問題。如果你將自己的AAR包用壓縮軟件打開時(shí)就會(huì)發(fā)現(xiàn)Build Tool似乎將你整個(gè)Module都打包進(jìn)去,唯獨(dú)沒有打包的就是你的依賴!

      比如你在Android中使用了ToolBar,RecyclerView等由support-v7提供的控件,或者類似xUtils3的第三方框架等,這些東西都是不會(huì)被打包進(jìn)你的AAR中。我們必須手動(dòng)將這些依賴的AAR一同添加到Unity3D工程。

      大部分的第三方庫都會(huì)提供AAR包文件,實(shí)在沒有也可以從GitHub上clone下來自己打包。Google官方提供的support庫等都可以在SDK目錄下的extras子目錄中找到,比如support-v7的AAR在如下位置可以找到:

      v7包

      看到這里你以為就能順利完成往Unity3D導(dǎo)入Android的工作嗎?

      Naive,這里還有兩個(gè)坑你沒跳呢!

      如果你的SDK中存在版本為24的Build Tool的話會(huì)爆出錯(cuò)誤:

      Build-tools為24時(shí)的報(bào)錯(cuò)截圖

      具體原因可能是Build Tool的Bug。要解決的話很簡(jiǎn)單,就是把24的Build Tool藏起來:

      躲貓貓

      到這里你應(yīng)該能夠順利地將Unity3D工程順利打包成APK。

      這個(gè)時(shí)候如果你還覺得包的版本越高越好就會(huì)遇到第二個(gè)坑,這個(gè)坑在24號(hào)版本的support-v7包中。

      報(bào)錯(cuò)截圖如下:

      報(bào)錯(cuò)截圖

      compile ‘com.android.support:appcompat-v7:24.x.x’只是一句依賴但是其導(dǎo)入的包并不只有一個(gè),如果你打開module的build\intermediates\exploded-aar目錄去看的話就會(huì)發(fā)現(xiàn)其實(shí)他有4個(gè)包。報(bào)錯(cuò)中提到的VectorDrawableCompat就在其中:

      叛徒

      然而這個(gè)時(shí)候就算你導(dǎo)入了這兩個(gè)包問題依舊存在。

      筆者猜測(cè)24的VectorDrawable包必須使用24的Build Tool來打包,而上面我們說過了24的Build Tool和Unity3D不太兼容。

      解決方案很簡(jiǎn)單,就是使用23的support包。

      筆者測(cè)試過使用23的support無需導(dǎo)入VerctorDrawable可以正常運(yùn)行。


      1、 使用Gradle腳本簡(jiǎn)化導(dǎo)包操作

      踩過以上的這些坑之后想必大家都已經(jīng)掌握了新姿勢(shì),但如果你像筆者一樣是個(gè)懶惰的程序員的話就會(huì)覺得,每次編譯都手動(dòng)復(fù)制來復(fù)制去好麻煩啊,而通過Gradle的腳本我們可以分分鐘解決這個(gè)問題。

      以下是筆者寫的腳本,當(dāng)成偽代碼來看的話相信有點(diǎn)經(jīng)驗(yàn)的開發(fā)者都能看懂:

      // 刪除舊的aar
      task deleteOldAar(type: Delete) {
          //刪除Unity工程下的Android資源
          delete '你的Unity3D工程/Assets/Plugins/Android/lib-release.aar'
          //由于AndroidManifest文件可以能有更新,一并刪除
          delete '你的Unity3D工程/Assets/Plugins/Android/AndroidManifest.xml'
          //刪除Android工程下的編譯資源
          delete 'build/intermediates/bundles/release/'
          delete 'build/outputs/aar/lib-release.aar'
      }
      
      // 導(dǎo)出AndroidManifest.xml
      task exportManifest(type: Copy) {
          from('src/main/')
          into('你的Unity3D工程/Assets/Plugins/Android/')
          include('AndroidManifest.xml')
      }
      
      //導(dǎo)出aar
      task exportAar(type: Copy) {
          from('build/outputs/aar/')
          into('你的Unity3D工程/Assets/Plugins/Android/')
          include('lib-release.aar')
      }
      
      //添加任務(wù)依賴
      exportAar.dependsOn(deleteOldAar, build, exportManifest)
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27

      二、 將Unity作為lib導(dǎo)入Android Studio

      如果你實(shí)際將工程作為libs導(dǎo)出的Unity3D導(dǎo)出的話你會(huì)發(fā)現(xiàn)這種方法帶有太多的限制了:

      • 項(xiàng)目所在的Module必須為設(shè)為library
        如果你的項(xiàng)目使用了比如xUtils中的基于注解和反射實(shí)現(xiàn)的視圖注入框架的話,你就會(huì)發(fā)現(xiàn)將module設(shè)置為library后框架的視圖注入功能就無法使用了,甚至連switch(view.getId())這樣的代碼都用不了。究其原因無論是注解還是switch語句其需要參數(shù)都必須是常量,而library的R.id.xxx要在打包成apk的時(shí)候才能確定,于是開發(fā)者就不得不寫繁瑣的findViewById了。

      • 不方便管理依賴庫
        如果項(xiàng)目依賴了某些庫那么在打包的時(shí)候要一并將這些庫的jar/aar一并導(dǎo)入到Unity目錄之中,升級(jí)依賴或者添加依賴全部都要手動(dòng)進(jìn)行。人為操作難免會(huì)出問題而Unity打包的速度也是慢的可以,每一次打包都像是在拷問著程序員一般。

      如果反過來想,不是將工程導(dǎo)出而是將Unity作為lib導(dǎo)入到Android Studio的話這一切都將迎刃而解。

      打開Unity的IDE,通過File->Build Settings打開打包設(shè)置
      打包設(shè)置

      選中Google Android Project并且簽名(不簽名無法導(dǎo)出工程,身為Android開發(fā)者我表示不解?。?,導(dǎo)出后我們就會(huì)看到Eclipse項(xiàng)目結(jié)構(gòu)的工程,如下:

      導(dǎo)出工程結(jié)構(gòu)

      assets存放的是編譯后的Unity腳本等東西,這部分是導(dǎo)出部分的核心,日后如果要更新Unity的lib的話,只覆蓋assets下的東西就夠了。其他的部分相信大家都十分熟悉了,不再贅述。

      我們將導(dǎo)出的東西作為library導(dǎo)入到Android Studio,build之后我們就能在module的輸出目錄下找到對(duì)應(yīng)的AAR文件了:

      AAR位置

      之后我們就可以直接使用AAR文件進(jìn)行開發(fā)了,是不是很方便。

      1、 更新Unity的AAR

      隨著項(xiàng)目的不斷研發(fā)Unity的部分總是需要更新的,如果導(dǎo)出一個(gè)AAR要重復(fù)上述的步驟的話那依然是很麻煩的。好在我們可以繞過Android Studio直接更新AAR文件。

      如前文所說Unity導(dǎo)出工程的核心都在Assets目錄下,而我們用壓縮軟件打開對(duì)應(yīng)的AAR文件就會(huì)發(fā)現(xiàn)Assets下的內(nèi)容只是被原封不動(dòng)地打包進(jìn)去了而已,所以我們完全可以用新導(dǎo)出的Unity工程中的Assets來替換AAR包下的東西。

      AAR打開

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多