embarcadero rad studio android google 地图应用

embarcadero rad studio android google maps app

我制作了一个简单的 google 地图应用程序,它从网络浏览器控件调用地图 url 并且运行良好,但现在我试图通过使用 TMapView 在第二个应用程序中添加更多功能控制,但我无法让我的新应用达到 运行。

我在 LG Q7+ phone 和 RAD Studio 10.3.3

上使用 32 位 Android

C++ 和 Pascal 版本的示例地图类型选择器也会发生这种情况,因此我认为它一定与 FMX.Maps.Android 有关。

我也在我的第一个工作项目中尝试过,但是一旦我添加了具有正确设置的 TMapView 控件并构建它,它就会以同样的方式崩溃,并在 [=47= 中的第 1525 行出现空错误.pas 文件。这绝对不是我的代码:)

我想最简单的示例是创建一个带有 TMapView 控件的 c++ 项目并填写所需的设置和 运行 或者 运行 带有 [=49 的地图类型选择器示例=] 32 位设备。

我为应用程序添加了所有正确使用权限,添加了 google 地图服务权利,添加了我的特殊 API 密钥,就像我遇到的所有文章一样该应用程序 运行 但我只是遇到了崩溃:

"Project map_cpp.apk raised exception class EJNIException with message 'java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.ClassLoader java.lang.Class.getClassLoader()' on a null object reference'. 

截图: https://i.imgur.com/OVwpSlY.png

据我所知,我已链接到正确的 SDK。甚至尝试了多个 java SDK 版本都没有运气,同样的崩溃。我看不出调用堆栈有什么问题,但我绝对不是 java 或 pascal 程序员,而且对 RAD Studio 来说还是个新手。

查看 android 监视器,唯一让我印象深刻且看起来可能存在身份验证错误的是:

"unable to connect to service com.google.android.gms.auth.key.retrieval.service.start" 

但我不能确定,正如我之前所说,我遵循了在线设置指南。我正在链接到我在下面关注的设置文章:

http://docwiki.embarcadero.com/RADStudio/Rio/en/Mobile_Tutorial:_Using_a_Map_Component_to_Work_with_Maps_(iOS_and_Android)

http://docwiki.embarcadero.com/RADStudio/Rio/en/Configuring_Android_Applications_to_Use_Google_Maps

Android 监控日志:

03-28 09:45:57.559: I/rcadero.map_cp(28426): The ClassLoaderContext is a special shared library.
03-28 09:45:57.681: D/PhoneWindow(28426): windowLightStatusBar : false, disable View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
03-28 09:45:57.815: I/C:\src\rtl\source\startup\startup_android.cpp(28426): ###################### Calling __initialize_pascal_units
03-28 09:45:57.815: I/C:\src\rtl\source\startup\startup_android.cpp(28426): ### __initialize_pascal_units: start
03-28 09:45:57.815: I/C:\src\rtl\source\startup\startup_android.cpp(28426): ### _embtinit_start: 0x0x89491450  _embtinit_end: 0x0x89494884
03-28 09:45:58.345: I/C:\src\rtl\source\startup\startup_android.cpp(28426): ### __initialize_pascal_units: finished
03-28 09:45:58.431: D/OpenGLRenderer(28426): Skia GL Pipeline
03-28 09:45:58.701: I/Adreno(28426): QUALCOMM build                   : f161b04, I0380b38922
03-28 09:45:58.701: I/Adreno(28426): Build Date                       : 04/06/19
03-28 09:45:58.701: I/Adreno(28426): OpenGL ES Shader Compiler Version: EV031.25.03.03
03-28 09:45:58.701: I/Adreno(28426): Local Branch                     : mybranche9580cbd-6698-f10a-bcc9-1458d0b52ae8
03-28 09:45:58.701: I/Adreno(28426): Remote Branch                    : quic/gfx-adreno.lnx.1.0.r52-rel
03-28 09:45:58.701: I/Adreno(28426): Remote Branch                    : NONE
03-28 09:45:58.701: I/Adreno(28426): Reconstruct Branch               : NOTHING
03-28 09:45:58.701: I/Adreno(28426): Build Config                     : S L 6.0.7 AArch32
03-28 09:45:58.705: I/Adreno(28426): PFP: 0x005ff110, ME: 0x005ff066
03-28 09:45:58.712: I/ConfigStore(28426): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
03-28 09:45:58.713: I/ConfigStore(28426): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
03-28 09:45:58.762: W/System.err(28426): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.ClassLoader java.lang.Class.getClassLoader()' on a null object reference
03-28 09:45:58.762: W/System.err(28426):    at com.embarcadero.rtl.ProxyInterface.CreateProxyClass(ProxyInterface.java:16)
03-28 09:45:58.762: W/System.err(28426):    at android.app.NativeActivity.onStartNative(Native Method)
03-28 09:45:58.763: W/System.err(28426):    at android.app.NativeActivity.onStart(NativeActivity.java:223)
03-28 09:45:58.763: W/System.err(28426):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
03-28 09:45:58.763: W/System.err(28426):    at android.app.Activity.performStart(Activity.java:7180)
03-28 09:45:58.763: W/System.err(28426):    at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3045)
03-28 09:45:58.764: W/System.err(28426):    at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
03-28 09:45:58.764: W/System.err(28426):    at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
03-28 09:45:58.764: W/System.err(28426):    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
03-28 09:45:58.764: W/System.err(28426):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
03-28 09:45:58.765: W/System.err(28426):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
03-28 09:45:58.765: W/System.err(28426):    at android.os.Handler.dispatchMessage(Handler.java:106)
03-28 09:45:58.765: W/System.err(28426):    at android.os.Looper.loop(Looper.java:205)
03-28 09:45:58.765: W/System.err(28426):    at android.app.ActivityThread.main(ActivityThread.java:6991)
03-28 09:45:58.765: W/System.err(28426):    at java.lang.reflect.Method.invoke(Native Method)
03-28 09:45:58.766: W/System.err(28426):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
03-28 09:45:58.766: W/System.err(28426):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:884)

感谢您的帮助!

Dave Nottage 想通了 - link 下面:

"Some sample apps need updating to use the new Google Play Services libraries. To do this, in Project Manager under Target Platforms, expand the target Android platform, right-click Libraries and click “Revert System files to default”. Rebuild the app and it should be OK."

https://www.delphiworlds.com/2019/02/a-fix-for-using-tmapview-on-android-9-devices/#comment-9841