我是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";
非常感谢任何帮助。
答案 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)
您可能在字符串名称中包含下划线,请在删除下划线后对其进行检查...。