2013-12-09 3 views
10

У меня есть эта странная трассировка стека при тестировании приложения на Samsung Galaxy S2 (GT-i9100), версия Android 4.3. Если это помогает, Bugsense сообщает также «данные журнала» = {u'ms_from_start ': u'19915', u'rooted ': u'true'}, поэтому я не совсем уверен, что это устройство коренится или нет (клиент тестирует приложение, а не меня). EDIT: пока я набираю это, клиент подтвердил, что у устройства есть пользовательский ПЗУ, если это имеет значение.java.lang.SecurityException: недопустимое имя пакета: com.google.android.gms

Во всяком случае, это полная трассировка стека:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackagename/com.mypackagename.activities.ARActivity}: 

java.lang.SecurityException: invalid package name: com.google.android.gms 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2355) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405) 
    at android.app.ActivityThread.access$600(ActivityThread.java:156) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5303) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
    at dalvik.system.NativeStart.main(Native Method) 

Caused by: java.lang.SecurityException: invalid package name: com.google.android.gms 
    at android.os.Parcel.readException(Parcel.java:1431) 
    at android.os.Parcel.readException(Parcel.java:1385) 
    at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:540) 
    at android.location.LocationManager.requestLocationUpdates(LocationManager.java:836) 
    at android.location.LocationManager.requestLocationUpdates(LocationManager.java:430) 
    at android.privacy.surrogate.PrivacyLocationManager.requestLocationUpdates(PrivacyLocationManager.java:290) 
    at com.mypackagename.activities.ARActivity.onCreate(ARActivity.java:371) 
    at android.app.Activity.performCreate(Activity.java:5259) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1098) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309) 

Теперь ARActivity.java:371 просто вызывает

locationManager.requestLocationUpdates(GPS, gpsRefreshPeriod, 0, locListener); 

где

private String GPS = "gps"; 
private int gpsRefreshPeriod = 500; 

и locListener является locationListener.

Теперь я понятия не имею, что здесь может быть неправильным, и я не могу воспроизвести эту ошибку на своих тестовых устройствах (Samsung Galaxy Tab2, Motorola Atrix 4G, Samsung Note2, Galaxy Nexus).

Я думаю, что может быть проверка com.google.android.gms каким-то образом, и, возможно, может быть Intent (или что-то еще), что в случае отсутствия этого пакета пользователь обновляет компонент устройства. Но я полностью не уверен, что я пойду в правильном направлении с этим мышлением.

Любые идеи или опыт с этим сбоем?

Спасибо.

ответ

0

Эти 2 вопроса очень схожи:

SecurityException when calling getLastKnownLocation

Add Google Maps to my app

Возможно, проблема связана с пользовательской ROM и вам необходимо attach the Play Services Android library project to your project.

+0

Спасибо за предложения. Первая ссылка также является единственной, охватывающей ту же проблему. Третья ссылка весьма полезна, но я уже это сделал (забыл упомянуть в вопросе). Возможно, в версии этого проекта lib я обнаружил, что использовал 3.2.x, просто изменил его на 4.x (последний доступный), так что увидим, все еще проблема. В любом случае, похоже, что это определенно проблема с ПЗУ. –

1

пытаются использовать

<uses-library android:name="com.google.android.gms" /> 

под тег приложения. Пример

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" > 
    <uses-library android:name="com.google.android.gms" /> 
1

Некоторые устройства, которые я использую для тестирования имеют возможности это не распространяется на поддержку GPS и получить место, что и послужило причиной того, что я получил исключение

«недопустимое имя пакета: ком .google.android.gms»

Мы должны добавить необходимые разрешения

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

и очень важно добавить android: required = false " для GPS.

<uses-feature 
     android:name="android.hardware.location.gps" 
     android:required="false" /> 

Подробнее: < uses-feature>

+0

благодарит за обмен опытом. Мой тестер использует встроенный Samsung Galaxy S2 с пользовательским ПЗУ, и я не могу получить информацию о том, какой пользовательский ПЗУ устанавливается там. Я попробую добавить часть использования вашей функции, поскольку до сих пор у меня были только эти два разрешения, если они были достаточными для приложения с GPS-приложением. Хотя я думаю, что шансы решить проблему с этим довольно тонкие, поскольку тестер уже включил GPS и подделку местоположения с помощью приложения fakeGPS перед запуском моего приложения. –

+0

Настройка 'uses-feature' будет фильтровать ваше приложение только в магазине Google Play. Пользователи по-прежнему смогут обойти приложение, и он все равно будет разбит. Что нужно, это решение на основе кода, чтобы мы могли обнаружить и поймать эту ошибку. Было бы очень полезно, если бы кто-то мог определить, какой пользовательский ПЗУ вызывает эту проблему. – twaddington

1

Мне кажется, что это устройство просто не установлено приложение GoogleApps. Пользовательский ПЗУ на самом деле может быть для этого намеком. Например, владелец этого устройства мог установить Cyanogenmod, но он забыл (или намеренно не установил) Google Apps, которые поставляются separately.

Смежные вопросы