获取ANDROID_ID失败的解决方案... R $ string;

时间:2016-03-06 08:43:55

标签: java android-studio

我是Android Studio(SDK版本23)的新手,并尝试按照this post中的最佳答案获取ANDROID_ID。

导入'secure'类后,当我尝试下面的建议答案时,我得到一个“无法解析方法getContext()”警告:

private String androidId = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);

我做了一些挖掘,并认为getApplicationContext()值得一试:

private String androidId = Secure.getString(getApplicationContext().getContentResolver(),Secure.ANDROID_ID);

我没有收到任何警告,应用程序构建成功。但是,如果我尝试在连接的设备上运行它,它会崩溃,并出现以下错误(摘要):

  

java.lang.NoClassDefFoundError:解析失败:Lcom / google / android / gms / R $ string;

     

在com.google.android.gms.measurement.zza。(未知来源)

     

...

     

引起:java.lang.ClassNotFoundException:在路径上找不到类“com.google.android.gms.R $ string”:DexPathList [[zip file“/data/app/application.myproject/base。 apk“],nativeLibraryDirectories = [/ vendor / lib,/ system / lib]]

     

...

     

引起:java.lang.NoClassDefFoundError:使用引导类加载器找不到类;没有可用的堆栈

当我手动指定我的androidId字符串时,应用程序不会崩溃:

private String androidId = "This works";

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

由于this post问题已解决。

在这种情况下,似乎错误是由excessive dependencies(> 65k)方法引起的。它被纠正如下:

第1步

修改gradle.build(app)以引用MultiDexApplication类

android {
compileSdkVersion 23
buildToolsVersion "23.0.0"

defaultConfig {

    ...

    multiDexEnabled true
}

    ...

dependencies {
    ...

    compile 'com.android.support:multidex:1.0.0'
}

第2步

将以下属性添加到清单文件中的应用程序标记:

<application
    ...
    android:name="android.support.multidex.MultiDexApplication">

答案 1 :(得分:0)

您可能在字符串名称中包含下划线,请在删除下划线后对其进行检查...。