Вопрос по языку программирования, известному как “write once, debug everywhere”.
андроид полностью падает вот с таким сообщением при использовании программы gnsslogger.apk ( https://github.com/google/gps-measurement-tools/tree/master/GNSSLogger ) :
art/runtime/indirect_reference_table.cc:138] JNI ERROR (app bug): local reference table overflow (max=512)
art/runtime/indirect_reference_table.cc:138] local reference table dump:
art/runtime/indirect_reference_table.cc:138] Last 10 entries (of 512):
art/runtime/indirect_reference_table.cc:138] 511: 0x13ecf000 java.lang.Class<android.location.GnssMeasurement>
art/runtime/indirect_reference_table.cc:138] 510: 0x136808a8 android.location.GnssMeasurement[] (7 elements)
art/runtime/indirect_reference_table.cc:138] 509: 0x13bd1400 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] 508: 0x13bd1478 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] 507: 0x13d1b900 byte[] (40 elements)
art/runtime/indirect_reference_table.cc:138] 506: 0x13d1b938 byte[] (40 elements)
art/runtime/indirect_reference_table.cc:138] 505: 0x13bd1670 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] 504: 0x13bd1d78 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] 503: 0x13bcb148 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] 502: 0x13bcb1c0 byte[] (11 elements)
art/runtime/indirect_reference_table.cc:138] Summary:
art/runtime/indirect_reference_table.cc:138] 1 of android.location.GnssMeasurement[] (7 elements)
art/runtime/indirect_reference_table.cc:138] 1 of android.location.GnssClock
art/runtime/indirect_reference_table.cc:138] 2 of java.lang.Class (1 unique instances)
art/runtime/indirect_reference_table.cc:138] 390 of byte[] (11 elements) (390 unique instances)
art/runtime/indirect_reference_table.cc:138] 118 of byte[] (40 elements) (118 unique instances)
Вот эти “висячие” byte[40] и byte[11] это предыдущие навигационые subframes для GPS и глонаса соответственно,
которые и забили local reference table.
Может я чего недопонимаю в этом языке, но разве DeleteLocalRef в
https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r30/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
JNIEnv* env = AndroidRuntime::getJNIEnv();
jobject navigationMessage = translate_gnss_navigation_message(env, message);
env->CallVoidMethod(mCallbacksObj,
method_reportNavigationMessages,
navigationMessage);
env->DeleteLocalRef(navigationMessage);
должен “освободить” память под массивом, являющийся частью navigationMessage ?
На Mate 9 Galileo raw data работает, но как-то не очень здорово. Вот пример сырых данных для E14
Raw,2352904,92654000000,,,-1174133401345816604,0.0,6.3731318907790016,,,0,14,0.0,1074,2657120,7,37.32952117919922,-594.4398950144232,0.07155628388788515,1,-5963.906697538496,0.0010088905692100525,,,,,0,,6
I/NAV не видел, и это видимо связано с проблемой navigationMessage.
EGNOS тоже почему-то не дает никаких сырых данных, а Beidou я пока не пробовал:
для этого надо редактировать конфигурационный XML gps4774config.xml на readonly диске ( EnableBeidou=“true”)
<gll_features
EnableLowPowerPmm="true"
EnableOnChipMiCtrl="true"
EnableInternalBlanking="false"
EnableGalileo="true"
/>
Также было бы интересно отключить глонас, но совершенно непонятно как, и можно ли вообще это сделать.