java.lang.SecurityException:包名无效:com.google.android.gms

时间:2013-12-09 15:51:08

标签: java android gps locationmanager

我在三星Galaxy S2(GT-i9100),Android版本4.3上测试应用程序时有这种奇怪的堆栈跟踪。如果它有帮助,Bugsense报告“日志数据”= {u'ms_from_start':u'19915',u'rooted':u'true'},所以我不太确定这个设备是否有根(客户端)正在测试应用程序,而不是我)。 编辑:当我输入此信息时,客户确认我的设备是自定义ROM,如果重要的话。

无论如何,这是一个完整的堆栈跟踪:

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。

现在,我不知道这里会出现什么问题,我无法在我的测试设备(三星Galaxy Tab2,摩托罗拉Atrix 4G,三星Note2,Galaxy Nexus)上重现此错误。

我猜可能会以某种方式检查com.google.android.gms,也许可能会有Intent(或其他),如果缺少该包,用户更新设备的组件..但我完全不是我确定我是否会按照这种想法走向正确的方向。

有关此次崩溃的任何想法或经验吗?

感谢。

4 个答案:

答案 0 :(得分: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 :(得分:1)

我用于测试的一些设备没有能力支持gps并获取位置,这就是我得到异常的原因

  

“包名无效:com.google.android.gms”

我们必须添加所需的权限

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

非常重要的是为GPS添加 android:required = false“

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

更多信息:&lt; uses-feature&gt;

答案 2 :(得分:1)

在我看来,此设备根本没有安装GoogleApps应用程序。自定义ROM实际上可能是一个暗示。例如,此设备的所有者可能已安装Cyanogenmod但他已忘记(或故意未安装)Google Apps,这些应用程序已提供separately

答案 3 :(得分:0)