오류해결


Jni DETECTED Error

App Project에서 프로가드를 사용 하였으나, ADQ SDK에 대한 예외처리를 하지 않았을 경우 아래와 같이 JNI DETECTED ERROR가 발생할 수 있습니다.

              

          ...

          JNI DETECTED ERROR IN APPLICATION: 
          JNI NewGlobalRef called with pending exception 
          java.lang.NoSuchMethodError: no static or non-static

          ...
              
            

만약 귀사의 앱 프로젝트에서 프로가드를 사용중이시면 proguard-rules.pro 파일 실행 후 아래의 코드와 같이 예외처리를 진행합니다.

              

        ... 

        #- For ADQ SDK

        -keep class com.qwertlab.adq.**{*;}
        -keep class androidx.**{*;}

        -dontwarn com.qwertlab.adq.**
        -dontwarn androidx.**

        ... 

              
            

MultiDex Error

MultiDex 오류는 단일 Application에서 66536(64k) 이상의 Method가 초과될 경우 MultiDex 오류가 발생 될 수 있습니다. MultiDex 오류를 해결하기 위해서는 다음과 같이 Multidex를 설정해야합니다.

              

          ...

          trouble writing output:
          Too many field references: 131000; max is 65536.
          You may try using --multi-dex option.

          ...
        
              
            
Multidex 설정

build.gradle(Module:app) 파일의 defaultConfig 속성에 multiDexEnabled 속성을 true로 설정합니다.

              
          
          ...

          android {

            defaultConfig {
              multiDexEnabled true
            }

          }

          ...
			
              
            

build.gradle(Module:app) 파일의 dependencies 속성에 multidex library를 추가합니다.

              
          
          ...

          dependencies {

            implementation 'com.android.support:multidex:1.0.3'

          }

          ...
			
              
            

MultiDexApplication을 상속 받는 Class를 구현 후 attachBaseContext() Method를 Override 하고 MultiDex.install() Method를 호출합니다.
만약 이미 Application을 상속 받는 Class를 구현하셨다면 Application 대신 MultiDexApplication을 상속 받도록 변경합니다.

              
          
          public class ExampleApplication extends MultiDexApplication {

            ...

            @Override
            protected void attachBaseContext(Context base) {
              super.attachBaseContext(base);
              MultiDex.install(this);
            }

            ...

            }

              
            

MultiDexApplication을 상속 받아 구현한 Class를 AndroidManifest.xml 파일의 application 속성에 아래와 같이 추가합니다.

              
          
		...

		<application
			android:name=".ExampleApplication"
		>

		...

		</application>

              
            

Lint Option Error

Lint Option Error가 발생하는 이유는 SDK에서 설정한 언어셋과 App Project에서 설정한 언어셋이 다를 경우 발생합니다. ADQ SDK에서 사용중인 언어는 영어(default),한국어를 지원하고 있으며 만약 App Project와 이러한 설정 정보가 상이할 경우 Lint Option Error가 발생될 수 있습니다.

SDK 연동 후 릴리즈 버전으로 APK 빌드시 Lint Option Error가 발생할 경우 build.gradle(Module:app) 파일을 실행 후 lintOptions 속성을 추가 후 abortOnError 속성을 false로 설정합니다.

            
      ... 

      android {

        lintOptions {
          abortOnError false
        }

      }

      ...

            
          

ETC

앞서 설명드린 오류와 별개로 발생하는 오류는 대부분 gradle 설정 정보로 인해 발생합니다.
샘플 앱 프로젝트를 참조하여 귀사의 프로젝트에 누락된 gradle 정보가 없는지 확인 부탁드립니다.

샘플 앱 프로젝트와 동일하게 설정하였음에도 불구하고 또 다른 오류가 발생할 경우 아래의 연락처로 문의 부탁드립니다.

Email : yahweh@qwertlab.com


Top