Android項目實戰(三十九):Android集成Unity3D項目(圖文詳解)

来源:https://www.cnblogs.com/xqxacm/archive/2017/12/28/8126553.html
-Advertisement-
Play Games

需求: Unity3D 一般用於做游戲 而且是跨平臺的。原本設計是Android 應用端A(原生開發)進行一些業務處理,最後由A 打開Android 應用端B(Unity3D 游戲開發)進行游戲操作。 這樣導致的問題: 1、A應用打開B應用 , 數據之間的傳遞不方便 2、正常關閉,異常關閉的交互及技 ...


  需求:

  Unity3D 一般用於做游戲 而且是跨平臺的。原本設計是Android 應用端A(原生開發)進行一些業務處理,最後由A 打開Android 應用端B(Unity3D 游戲開發)進行游戲操作。

 

  這樣導致的問題: 

  1、A應用打開B應用 , 數據之間的傳遞不方便

  2、正常關閉,異常關閉的交互及技術上處理麻煩

  3、版本迭代,需要分開考慮

  4、體驗差

  5. ......................

  最終要合併成一個Android應用 , 提高用戶體驗。 實現思路即 Android工程繼承(引入)Unity3D項目(依賴的Android項目 生成一個類庫)。

  

  下麵開始詳細步驟:

  一、Unity3D 工程師 將 項目生成一個類庫

    這個不多說,讓Unity3D 工程師去做 ,我們只需要這個類庫就行

  

     二、Android工程導入類庫

    

     

    註:三個都要選中

        

 

       導入成功之後 ,會有一些錯誤,要進行修改

    

 三、修改

  (1)、找到類庫目錄下的build.gradle文件

       將第一行: apply plugin: 'com.android.application'  改為: apply plugin: 'com.android.library' 

       將 compileSdkVersion 和 buildToolsVersion 改為和 app目錄的下build.gradle 一致

      將defaultConfig{}下的 applicationId 一行刪除

                   Sync Now...

      最終如下:

      

 

    

 (2)、找到類庫目錄下的AndroidManifest.xml 文件

     刪除application 下的幾條屬性

    android:debuggable="false"

    android:label=""

    android:theme=""

    android:icon="@mipmap/ic_launcher"

    

    找到主入口Activity 即有 <intent-filter></intent-filter> 的  ,添加一條屬性:android:process="e.unitry3d",這是讓Unity3D的主Activity退出的時候 可以回到Android部分,否則會有異常問題

     然後刪除<intent-filter>內部的所有部分 , 這一部分是標註該Activity作為主入口 並且 在手機桌面上顯示的,去掉了,不在桌面顯示,因為Android部分調用這個進入Unity3D部分,所以預設具有主入口的功能。

    效果如下:

  <application android:allowBackup="true"
      android:name="com.xxxxx.SensorS.XApplication"
      android:supportsRtl="true"
      android:isGame="true">
    <activity
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:name="com.xxxxx.SensorS.MainActivity"
        android:process="e.unitry3d"
        android:screenOrientation="landscape">
    </activity>

 

    

   (3)、依賴該類庫

      

       選擇類庫依賴

      

   

  (4)、Android部分調打開Unity3D主Activity , 即打開類庫中的某個Activity

Intent intent = new Intent();
// unity3d部分的主activity                              
intent.setClass(TaskListActivity.this,MainActivity.class);
startActivity(intent);

 

  

  另:可能出現的錯誤

  1、你的硬體不支持! 

  

  這個出現的幾率比較大,首先看一下unity3d類庫的文件目錄 , 只有armeabi-v7a 和 x86 兩個文件夾

  

   所以我們要解決的就是 查看一下app目錄下的 和 所有類庫下的 libs文件夾或者jniLibs文件夾下 也只能有這兩個文件夾 , 多的需要刪除

    還要註意:

   如果你的app目錄或者module目錄下的build.gradle文件夾中有如下代碼: 

   ndk {
            //選擇要添加的對應cpu類型的.so庫。
            abiFilters  'armeabi-v7a' ,'x86'
        }

   記得也必須只能有這兩個,多的也要刪除。

   只要保持一致,這個問題就解決了。

  

  2、jar包衝突的問題,這個屬於常見問題,類庫和app中保留一個就行,不多說了。

    

  3、BuildConfig.class 文件衝突

Error:Execution failed for task ':ipark2:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/xxxxx/xxxxx/xxxx/BuildConfig.class

 

   這個就說你的  com/xxxxx/xxxxx/xxxx/ 目錄下的BuildConfig.class 文件衝突了 。 一般是在類庫中,jar包下有這麼一個文件,而原來項目中是沒有的,是生成類庫的時候系統給生成的。

     解決方法就是 把該文件從 jar包中刪除。

     舉例:

   1、現在有一個jar包 

 

   2、打開該文件所在的目錄 , 按Shift + 滑鼠右鍵 選擇 ‘從此處打開命令視窗’

      輸入命令: jar xf SensorS.jar    註:SensorS 即你的jar包的名字

     

      執行命令之後 會發現目錄下多了一個jar包解壓後的文件,在該文件夾下按目錄找到BuildConfig.class 文件, 刪除

    3、重新把處理後的文件夾壓縮成jar包  

    jar cvf SensorSSS.jar com    註:SensorSSS 即重新生成的jar包的名字  , com即 要被壓縮成jar包的文件夾(即原先jar包解壓縮出來的文件並刪除BuildConfig.class文件)

     

 

 

     最後將處理後的jar包替換原來的即可

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 前文中就有提到,Hybrid模式的核心就是在原生,而本文就以此項目的Android部分為例介紹Android部分的實現。 提示,由於各種各樣的原因,本項目中的Android容器確保核心交互以及部分重要API實現,關於底層容器優化等機制後續再考慮完善。 大致內容如下: JSBridge核心交互部 ...
  • Runtime-iOS的黑魔法,還是很好玩的,消息機制、方法替換簡單記錄了一點,持續更新.... 1.方法替換 在類load方法中,替換系統方法 2.動態生成屬性 3.字典轉模型的實現 ...
  • 最近在做一個軟解視頻疊加硬解視頻的方案,網上看了很多教程,始終不得要領.雖然ijkplayer提供了ijkplayer-example這個示例工程,但對於初入安卓的人來說,要將ijkplayer整合到自己的工程中也是頗為不易的. 這裡要感謝giraffeplayer的作者,下麵是github地址 h ...
  • 問題 上傳至itunes Connect時報了兩個錯: iTunes Store Operation Failed ERROR ITMS xxxxx:"description length:xxxxxx" iTunes Store Operation Failed ERROR ITMS 90717: ...
  • 這篇博客主要更加深入地瞭解一下Block。包括:Block的實現、__Block的原理以及Block的存儲域三方面。 ...
  • 雖然文章多如牛毛,但是還是記錄一下了 效果圖首先已經進入了首頁,每次進入頁面都會有個toast彈出提示,當點擊第二個菜單,toast彈出,在次點擊第一個菜單,因為已經載入過了,所以不彈出,在次點擊第二個菜單,同理,在點擊第三個菜單,第一次點擊,彈出 實現也比較簡單 首先繼承自己的base類 定義三個 ...
  • 前言:之前使用Android內置的資料庫,感覺一大堆SQL語句,一不小心就錯了,很難受,學習了這個LItePal的開源資料庫框架,瞬間覺得Android內置的資料庫簡直是垃圾般的存在 LitePal GitHub首頁:https://github.com/LitePalFramework/LiteP ...
  • 0x01 先說總結: 參照https://www.cnblogs.com/jiaoxiake/p/6818786.html 最後說的步驟, 參考:https://www.52pojie.cn/thread-586058-1-1.html 通過DexExtractor將加固後的apk還原odex,拖到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...