유니티로 개발할 때 어렵게 해결했던 문제들에 대해서 문제점과 해결책을 정리합니다.

READ_PHONE_STATE(전화걸기및관리) 권한 자동 추가 문제

환생영웅전에서는 유니크계정문자열을 생성하기 위해서 SystemInfo.deviceUniqueIdentifier를 사용하였고, 해당 권한이 필요했습니다. 새 프로젝트에서는 해당 기능을 사용하지 않음에도 불구하고 권한이 자동 생성됐습니다.

구글님은 필요없는 권한을 추가하는 것을 좋아하지 않고, 한국인터넷진흥원에서도 추가된 권한에 대한 설명을 요구합니다…

해결책은 다음과 같습니다. AndroidManifest.xml 내에 최소/타겟 버전을 명시하면 해당 권한은 추가되지 않습니다. 중요한 점은 Plugins 폴더 내 모든 AndroidManifest 파일에 명시해야 권한이 추가되지 않습니다.

유니티 안드로이드 빌드 오류(dex 오버) 문제

유니티에서 다양한 플러그인을 사용하게 되면 dex 제한 수치를 넘어서 빌드 오류가 발생하는 문제가 종종 발생합니다. 기존에는 제한 수치가 넘지 않도록 플러그인을 통합하는 방법도 있고, export 후 안드로이드 스튜디오로 빌드하는 방법이 있었습니다.

유니티 2018에서는 gradle 빌드를 사용하면서 이전 버전과 동일하게 apk파일로 빌드하는 방식이 새로 추가되었습니다.

MultiDex를 사용하여 프로젝트 빌드

Custom Gradle template 체크하면 설정파일이 생성됩니다. Alt text

생성된 mainTempleate.gradle을 열어서 빠진 부분을 추가합니다.

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

buildscript {
    repositories {
        google()
        jcenter()
		maven { url "https://maven.google.com/"}
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

allprojects {
    repositories {
        jcenter()
		maven { url 'https://maven.google.com'}
		flatDir {
            dirs 'libs'
        }
    }
}

apply plugin: 'com.android.application'

dependencies {
    compile 'com.android.support:multidex:1.+'
	implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}

android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        multiDexEnabled true
		ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
    }
	dexOptions {
        javaMaxHeapSize "4g"
    }
    lintOptions {
        abortOnError false
    }

    aaptOptions {
        noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
    }**SIGN**

    buildTypes {
        debug {
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
            jniDebuggable true
        }
        release {
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
        }
    }**PACKAGING_OPTIONS****SPLITS**
**BUILT_APK_LOCATION**
}**SPLITS_VERSION_CODE****SOURCE_BUILD_SETUP**

AndroidManifest.xml에 다음의 내용을 추가합니다.

<application android:icon=”@drawable/app_icon” android:label=”@string/app_name” android:debuggable=”true” tools:replace=”icon, label” android:name=”android.support.multidex.MultiDexApplication”>

빌드 실행

참고자료

[http://today7e.blogspot.com/2018/06/android.html]