NCMB Unity SDK가 AdMob과 같은 안드로이드 플러그인과 경쟁할 때의 해결

정보 업데이트


2017/10/6
v3.1.0부터 첨부된 라이브러리는jar에서aar로 바뀌었고'모드2'문제는 약간 해제되었습니다(폴더가 다르기 때문에 중복될 수 있습니다)

개시하다


Nift Crowd mobile backend(이하 NCMB)는 iOS/Android로 간단하게 네트워크 기능을 가져올 수 있는 서비스 SDK입니다.
http://mb.cloud.nifty.com/
이 유닛 플러그인은 여기 있습니다.
NCMB Unity Plugin v3.0.0
NCMB Unity Plugin v3.1.0
https://github.com/NIFCloud-mbaas/ncmb_unity/releases
이 패키지는 가능한 한 간단하게 가져오기 위해 처음부터 Plugins/Android/아래에 안드로이드 Manifest를 설치했습니다.xml 파일이 있습니다.
원래 안드로이드 매니페스트 파일은 사용하는 기능(가능하면) 개발자가 직접 작성한 것으로, SDK에 고정된 안드로이드 매니페스트 파일이 있으면 다른 SDK와 함께 타구를 한다.
또한 NCMB Unity Plugin에는 28개의 작업에 필요한 라이브러리가 포함되어 있습니다.
Android Support Library (android-support-v4.jar)
Google Play Services Library (google-play-services.jar)
  • play-services-base-11.0.0.aar
  • play-services-basement-11.0.0.aar
  • play-services-gcm-11.0.0.aar
  • play-services-iid-11.0.0.aar
  • play-services-tasks-11.0.0.aar
  • support-compat-26.0.2.aar
  • support-core-utils-26.0.2.aar
  • support-v4-26.0.2.aar
  • 다른 SDK를 가져올 때도 이러한 라이브러리 간에 충돌이 발생합니다.
    이 문서는 자주 사용되는 Google Mobile Ads Plugin의 예를 들어 경쟁의 해결 방법을 소개합니다.
    Google Mobile Ads Unity Plugin v3.5.0
    https://github.com/googleads/googleads-mobile-unity/releases

    모드 1: Android Manifest 파일의 설정이 일치하지 않습니다.


    Unity에는 프로젝트 파일에 여러 개의 안드로이드 매니페스트가 있습니다.xml이 있을 때, 나는 그것들을 합치고 싶다.
    아무 생각 없이 NCMB, Google Mobile Ads 패키지를 프로젝트에 부딪쳐 구축하면 다음 오류가 발생합니다.
    Unable to merge android manifests. See the Console for more details. See the Console for details.
    
    콘솔에 표시된 오류 로그를 계속 보십시오.
    Error: [Temp\StagingArea\AndroidManifest-main.xml:3, 
    C:\ [path] \Temp\StagingArea\android-libraries\GoogleMobileAdsPlugin\AndroidManifest.xml:2] 
    Main manifest has <uses-sdk android:minSdkVersion='10'> but library uses minSdkVersion='14'
    
    NCMB Unity가 SDK 패키지를 가져오면 Plugins/Android 폴더 바로 아래에서 Android Manifest를 다운로드합니다.xml을 설정합니다.
    유니티는 건물에서 안드로이드 바로 아래 선언문을'Main manifest'로 인식했다.
    Google Mobile Ads Plugin은 안드로이드 API 버전의 하한선 14(Android 4.0)인데, Main Manifest 파일에는 10(Android 2.3.)이라고 쓰여 있어 화가 나는 함매.
    따라서 NCMB 유래의 안드로이드 매니페스트xml에서
         <uses-sdk android:minSdkVersion="10"/>
    
    장소
         <uses-sdk android:minSdkVersion="14"/>
    
    제가 고쳐 쓰겠습니다.

    모드 2: Android용 라이브러리 반복


    Unable to convert classes into dex format. See the Console for Details
    
    이 오류 로그는 매우 길기 때문에 생략합니다. dex format 변환이 실패할 때 Plugins/Android에 같은 종류의 라이브러리를 포함할 수 있습니다.
    예를 들어 NCMB Unity SDK에 포함된 "android-support-v4.jar support-v4-26.0.2aar"와 Google Mobile Ads Unity Plugin에 포함된 "support-v4-24.0.aar"확장명이 다르다. 같은 라이브러리이기 때문에android-support-v4이다.jar버전의 이전 버전을 삭제합니다.
    마찬가지로'구글플레이-서비스s.jar'(에 포함된 학급)과 구글 모바일 Ads Unity Plauggin이 설치한'플레이-서비스s-ads-10.26.ar'등 몇 개의 라이브러리가 경쟁하고 있기 때문에 구글플레이-서비스는 경쟁한다.jar을 삭제합니다.
    마찬가지로'플레이-서비스-YYY-x.X.aar'에서 YYY의 라이브러리 이름이 같은 녀석은 중복되기 때문에 낡은 것을 삭제해야 한다.
    그러나 NCMB가 사용하는 Google Cloud Messageing과 관련된 라이브러리는 필요하기 때문에 개별적으로 설정만 하면 됩니다.
    두 가지 절차가 있다.

    NCMB SDK 3.0.1 이전 프로세스 사용


    만약 어떤 이유로 NCMB SDK 3.0.1을 사용하기 전에 첨부된 "android-support-v4.jar""Google play-서비스s.jar"를 삭제한 후 추진 알림 등에 필요한 프로그램 라이브러리를 다음과 같이 설정합니다.

    안드로이드 SDK에서 NCMB에 필요한 범주의 개별 라이브러리를 선택하여 구성


    Android SDK Manager에 Google Repository를 설치하면 sdk\extras\Google\m2 repository\com\android\gms 아래에서 다양한 Google 서비스용aar 파일 그룹을 찾을 수 있습니다.
    "play-서비스-gcm-XXX.aar"를 찾으면 Unity 프로젝트의 Plugins/Android 폴더 아래에 직접 놓으세요.
    (XXX는 버전 이름, 집필시 최신 10.2.6)
    또한play-서비스 라이브러리는 안드로이드 폴더 바로 아래에 두어야 한다.

    Google Ads Plugin의 경우: AdMobDependencies덮어쓰기 cs 자동 획득


    Google Ads Plugin에는 필요한 라이브러리를 자동으로 다운로드하는 관리자가 포함되어 있습니다.
    Assets\GoogleMobileAds\Editor\AdMobDependencies.따라서 기본적으로 cs는play-서비스-ads와 관련된 프로그램 라이브러리를 다운로드하는 것으로 설정되어 있습니다.
    이거 개조할 거야.다음 메서드 호출을 static void SetupDeps()에 추가하십시오.
    
            Google.VersionHandler.InvokeInstanceMethod(
                svcSupport, "DependOn",
                new object[] { "com.google.android.gms", "play-services-gcm",
                                       "LATEST" },
                namedArgs: new Dictionary<string, object>() {
                            {"packageIds", new string[] {
                                    "extra-google-m2repository",
                                    "extra-android-m2repository"} }
                });
    
    
    단지 플레이-서비스-ads의 처리를 복제하여 플레이-서비스-gcm로 바꿀 뿐이다.
    다시 쓰기가 끝나면 메뉴의 Assets->Play Services Resolver->Android Resolver->Resolve Client Jars를 실행하십시오.
    'play-서비스-gcm-XXX.aar'은 안드로이드 폴더 바로 아래에 있습니다.

    모드 3: 다른 Android SDK는 라이브러리 내에서 좋지 않습니다.


    아래 서술한 내용을 참조하다
    [Unity] 이런 안드로이드 로컬 플러그인을 만들 수 없어요![특히 광고 SDK!]
    http://qiita.com/RyotaMurohoshi/items/3b95daeb8eaa6b487a20
    로컬 플러그인 Java의 코드에 R 클래스 상수를 더 이상 쓰지 마십시오.Resources 클래스의 getIdentifier 방법을 사용하여 id를 가져오십시오.
    NCMB SDK Unity가 이 나쁜 놈을 밟지 않은 걸 확인했습니다.
    여기에 광고 SDK까지 더하면 그 사람이 나쁜 짓을 할 수도 있어요.

    어떻게 해야만 경쟁을 개선할 수 있습니까


    "Android Manifest 파일은 경쟁이 있을 수 있으니 개발자가 0부터 모두 쓰도록 하세요!"그렇게 되면 영입 난이도가 높아지니까 좋은 느낌으로 해결하고 싶어요.
    우선, NCMB Unity SDK는jar에 라이브러리가 있지만,jar 파일을 사용하는 플러그인은Unity5에 설치하는 것을 추천하지 않습니다.
    OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an Android Library. 
    
    이런 실수가 있었던 건
    AR로 대체하기만 하면 일부 라이브러리의 경쟁을 없앨 수 있다.
    더 나아가 support-v4-XX를 말씀드리겠습니다.만약aar가 존재한다면, 첨부된 라이브러리를 삭제하고, 이러한 처리가 있다면 완벽합니다.
    (원래 Plugins/Android 바로 아래에 있는 프로그램 라이브러리만 포함되어 있기 때문에 이렇게 처리할 필요가 없습니다. 현재 디렉터리에 들어가도 버그로 구축됩니다.)
    NCMB Unity SDK 3.0.0에서 Unity 4의 대응을 잘랐기 때문에jar 버전이 없어도 된다고 생각합니다.
    NCMB EVA를 하고 있어서 개발팀에 요청했어요.
    나의 요구가 채택되어 반영되었다.잘 됐다.
    ~~ 그럼 이럴 때 문제는 안드로이드 매니페스트 처리입니다.
    아라는 빌드업 시 언패키지로 되어 있으며 내부의 안드로이드 매니페스트 설정에 따라 다양한 활동을 잘 처리할 수 있다.
    하지만 현재 NCMB Unity SDK는 안드로이드 매니페스트입니다.xml에 Bundle Identifier의 사양을 수동으로 쓰기 위해
    aar에 Android Manifest를 넣으면 자동으로 병합되지 않습니다.
    구축 전 처리는 AndroidManifest에서 PlayerSettings에 있습니다.Application Identifier에서 가져온 Package Name 추가...이런 설계가 가능한가.이 조사를 진행하고 있습니다.
    (원래 Bundle Identifier는 다른 방법으로 전달할 수 없나요?)~~
    아라화로 이 충돌도 해소될 수 있어 조사 중이다.

    참조 사이트


    Admob과 Nifty Cloud의 푸시 알림을 함께 사용하는 Unity
    http://b.i-tach.com/?p=1015
    Google Mobile Ads Unity Plugin 3.05 + NCMB Unity SDK 2.2.0 시 대응법이다.

    좋은 웹페이지 즐겨찾기