Firemonkey RAD Studio 10.3.3 안드로이드 앱에서 센서 컴포넌트 사용시 링크 오류 해결방법
2020.03.18 14:30
Kazuhiro INOUE 블로그 글을 번역한 것입니다.
RAD Studio 10.3.3 안드로이드 앱에서 센서 컴포넌트 사용시 링크 오류 해결 방법
SDK 버전 26에만 있는 심볼을 참조하는 Androidapi.Sensor.pas 문제로 인해 어플리케이션에서 SDK 버전 22을 참조하면 링크 오류가 발생합니다.
C++ 빌더 10.3.3을 이용하여 TLocationSensor 컴포넌트를 사용하여 안드로이드 애플리케이션을 빌드하는 경우, [ldandroid Error] "ld" exited with code 1 이런 오류 메세지가 발생합니다. 델파이에서 심볼 이름 (예를 들어, 스크립트를 사용하여 Grijjy 사의 블로그에 기재된 자체 오류코드와 같은 Android 타사의 호출 스택 라이브러리에 의해 생성 된 심볼을)를 일치시키려는 경우 델파이10.3.3에서는 같은 문제로 인해 다른 증상의 링크 오류가 발생합니다.
이 문제는 Androidapi.Sensor.pas 파일의 일부 심볼이 Android SDK 버전 26에만 도입되어 있는데 어플리케이션은 이러한 심볼들이 없는 버전 22에 연결되어 있기때문입니다. 이 오류를 해결하려면 로컬 복사본을 만들고 심볼을 주석 처리하십시오.
해결 방법
1. C : \Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\android\에서 Androidapi.Sensor.pas 및
Androidapi.inc 파일을 찾습니다(다른 위치에 설치 한 경우에는 같은 이름의 파일을 찾습니다.)
2. Androidapi.Sensor.pas과 Androidapi.inc를 프로젝트의 소스 폴더에 복사하고 Androidapi.Sensor.pas만 프로젝트에 추가합니다.
Androidapi.inc 파일은 Androidapi.Sensor.pas을 빌드하는 데 필요합니다.
3. Androidapi.Sensor.pas 파일을 열고 다음 심볼의 선언을 찾아 주석 처리합니다.
- ASensorManager_getInstanceForPackage
- ASensorManager_getDefaultSensorEx
- ASensorManager_createSharedMemoryDirectChannel
- ASensorManager_createHardwareBufferDirectChannel
- ASensorManager_destroyDirectChannel
- ASensorManager_configureDirectReport
- ASensorEventQueue_registerSensor
- ASensor_isDirectChannelTypeSupported
- ASensor_getHighestDirectReportRateLevel
4. 다음 버전(10.4)로 업그레이드 할 때 Androidapi.Sensor.pas과 Androidapi.inc 파일의 로컬 복사본을 프로젝트에서 제거하십시오.
[관련 링크]
C++ 빌더의 안드로이드 위치 센서 문제: http://blog.blong.com/2020/02/cbuilders-android-location-sensor-woes.html