Huvle SDK 연동 오류1. Library Path 오류2. Eclipse dx.jar 오류3. JNI 오류3-1. JNI DETECTED ERROR3-1-1. Proguard 설정3-2. FATAL EXCEPTION3-3. 기타 오류사항4. MultiDex 오류5. Lint option Error.6. Huvle 이용 동의창 오류7. 기타 오류사항
Huvle SDK Library를 정상적으로 Module Import를 하였으나 아래의 그림과 같이AndroidManifest.xml
혹은
MainActivity
에서 Huvle SDK를 참조하지 못할 경우 Huvle SDK 내부에서 사용중인 jar
파일의
경로를 설정해주어야합니다.
1-1. Huvle SDK Library Path 설정
build.gradle(Module:app)
파일의 dependencies
영역에 Huvle Library 내부에서
사용중인 jar
파일의 경로를 설정합니다.
Example Library Path 설정[build.gradle(Module:app)/dependencies
]
x...
dependencies {
...
//-- include project path/lib
implementation fileTree(dir: '../Stealthaddplatformbrowser_lib_sw_3.0.17/libs', include: ['*.jar'])
implementation project(path: ':Stealthaddplatformbrowser_lib_sw_3.0.17')
...
}
...
앱사의 폴더 구조 및 Library 버전에 맞게 Library Path를 설정해주셔야합니다.
Eclipse IDE
를 통해 Huvle SDK Library 연동 후 앱 빌드 시 아래와 같은 오류 메시지가 발생한다면 build-tools
버전 정보를 수정해야합니다.
Error Message
Failed to load E:\IDE\eclipse_sdk\Android\sdk\build-tools\27.0.3\lib\dx.jar
Unable to build: the file dx.jar was not loaded from the SDK folder.
귀사의 앱 프로젝트의 project.properties
파일에 build-tools
버전 정보를 25.0.3으로 설정합니다.
project.properties
파일 경로
Example Code[project.properties
]
...
sdk.buildtools=25.0.3
...
귀사의 앱 프로젝트에서 프로가드를 사용하였고, Huvle Library를 예외처리하지 않았을 경우 아래와 같이 JNI DETECTED ERROR
가
발생할 수 있습니다.
Error Message
...
JNI DETECTED ERROR IN APPLICATION:
JNI NewGlobalRef called with pending exception
java.lang.NoSuchMethodError: no static or non-static
method "Lcom/byappsoft/sap/utils/Sap_Func;.setActionsR()V"
...
귀사의 앱 프로젝트에서 프로가드를 사용하고 있다면 아래와 같이 proguard-rules.pro
파일에 Huvle SDK를 예외처리합니다.
Example Code[proguard-rules.pro
]
...
-keep class com.byappsoft.sap.**{*;}
...
FATAL EXCEPTION
이 발생하여 Huvle Library 내부에서 사용중인 Native 함수를 찾을 수 없을 경우 아래와 같은 오류
메시지가 출력됩니다.
이러한 오류가 발생하는 원인은 Huvle Library 프로젝트에서 사용중인 .so
파일의 파일명과 귀사의 앱 프로젝트에서 사용중인 .so
파일 명이 중복될 경우 아래와 같은 FATAL EXCEPTION
이 발생할 수 있습니다.
Error Message
...
FATAL EXCEPTION: main
java.lang.UnstisfiedLinkError: No implemtation found for byte[]
com.byappsoft.sap.utils.Sap_Func.getKeySec(byte[], int)
...
귀사의 앱 프로젝트에서 사용중인 .so
파일 명과 Huvle SDK 내부에서 사용중인 .so
파일명(libnative-huvle-lib.so
)이 중복되는지 확인하십시오.
만약 파일 명이 동일할 경우 Huvle SDK 내부에서 사용중인 .so
파일이 정상적으로 빌드되지 못하여 오류가 발생할 수 있습니다.
3.0.17
버전 이하에서 파일명 중복 오류가 발생하여.so
파일명을huvle
을 포함한 파일명으로 수정하였습니다.
Old File Name
:libnative-lib.so
New File Name
:libnative-huvle-lib.so
Huvle Library 프로젝트의 하위의 JniLibs
폴더안에 존재하는 .so
파일이 정상적으로 로드되지 않았을 경우
다양한 오류가 발생될 수 있습니다.
JNI와 관련된 오류가 발생되었다면 jniLibs
폴더안의 .so
파일들이 정상적으로 로드되었는지 확인이 필요합니다.
NDK와 관련된 오류 사항이 발생하여 문제 해결이 어려울 경우에는 관리자에게 문의 부탁드립니다.
귀사의 앱 프로젝트에서 다수의 라이브러리를 연동하였을 경우 앱의 규모가 커지게되어 MultiDex 오류가 발생될 수 있습니다.
Error Message
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
단일 Application에서 66536(64K)
이상의 함수(Method)
를 초과하여 사용하게될 경우 MultiDex
오류가 발생할 수 있으며, 해당 오류를 해결하기 위해서는 아래와 같이 Multidex
를 설정해야합니다.
Multidex 설정
build.gradle(Module:app)
파일에 defulatConfig
속성에
multiDexEnabled
속성을 true
로 설정합니다.
Example Code [build.gradle(Module:app
]
android {
...
defaultConfig {
...
multiDexEnabled true
...
}
...
}
build.gradle(Module:app)
파일에 dependencies
영역에
multidex
라이브러리를 추가합니다.
Example Code [build.gradle(Module:app
]
...
dependencies {
//-- 최신 라이브러리 버전명으로 변경.
implementation 'com.android.support:multidex:1.0.3'
}
...
MultiDexApplication
을 상속 받는 Class
를 생성합니다. class 생성 후 아래의 예제 코드와
같이 attachBaseContext( )
메서드를 Override
하여 MultiDex.install(
)
메서드를 호출합니다.
만약
Application
을 상속 받는 class가 이미 있다면 해당 class의extends
정보를MultiDexApplication
으로 변경 합니다.
Example Code
public class MyApplication extends MultiDexApplication {
...
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
...
}
MultiDexApplication
을 상속 받는 class
정보를
AndroidManifest.xml
파일의 <application>
속성에 추가해줍니다.
Example Code [AndroidManifest.xml
]
...
<application
...
android:name="com.sample.multidextest.MyApplication"
...
>
</application>
...
Huvle Library 연동 후 릴리즈 버전으로 APK 빌드시 Lint Optin
Error가 발생할 경우 build.gradle(Module:app)
파일에 lintOptions
구문을 추가하고 abortOnError
속성을 false
로
설정합니다.
Example [build.gradle(Module:app
]
android {
...
// This is important, it will run lint checks but won't abort build
lintOptions {
abortOnError false
}
...
}
Lint Option
Error가 발생하는 이유는 Huvle Library 내부에서 사용중인 언어와 귀사의 앱에서 사용중인 언어 정보가 다를 경우 발생할 수 있습니다.Huvle Library는
영어(기본언어)
,한국어
,중국어
,베트남어
,일본어
를 지원하고 있습니다.
Sap_act_main_launcher.class
는 java
파일 형태로 배포됨으로 앱사측에서 소스 수정 및 Log 기록을
확인할 수 있습니다. 만약 Huvle 이용 동의창이 정상적으로 출력되지 않았을 경우 아래의 예제 코드와 같이
initsapStart( )
메서드가 정상적으로 호출되었는지 확인하십시오.
Example Code
public class Sap_act_main_launcher{
public static void initsapStart(...) {
...
Log.d("HUVLE", "Calling initsapStart method ");
...
}
}
initsapStart( ) 메서드가 정상적으로 호출되지 않았을 경우
Huvle Library 연동에 어려움이 있다면 샘플 앱 다운로드 후 샘플 앱의 설정 정보를 확인하여 귀사의 앱 프로젝트에 누락된 정보가 없는지 확인이 필요합니다.
연동 오류가 발생하는 가장 큰 이유는 gradle 설정 정보에 의한 오류일 확률이 가장 높습니다. gradle 설정 정보가 정상적으로 설정되었는지 확인이 필요합니다.
오류 해결 문서를 통해 오류 사항을 해결하지 못할 경우에는 관리자에게 문의 부탁드립니다.
- E-mail (mchama@huvle.com)