最近谷歌发布了Google Play Install Referrer API(公告).
与来自Google Play的INSTALL_REFERRER广播相比,除了引荐来源本身之外,它还提供了点击和安装时间等额外信息.
第一个问题:它是INSTALL_REFERRER广播的完全替代品吗?我们应该放弃广播接收器并开始使用新的API吗?
第二:在INSTALL_REFERRER广播中,有哪些特定情况下新API更可靠?
在探索Jekyll进行网站生成时,我遇到了JSON数据加载问题.我已生成默认的Jekyll站点,将tracks.json文件添加到_data文件夹并将此代码添加到默认值index.html
<span>Tracks:</span>
<ul>
{% for track in site.data.tracks.tracks %}
<li>Title: {{ track.title }}</li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
结果我得到了这个代码:
<span>Tracks:</span>
<ul>
</ul>
Run Code Online (Sandbox Code Playgroud)
tracks.json 好像:
{
"tracks":[
{
"id":"140",
"title":"Android"
},
{
"id":"142",
"title":"GDG[x]"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我使用正确的方式访问JSON字段吗?如果没有,那么正确的方法是什么?
更新: 问题已在Jekyll v.2.1.0中修复
问题
根据JSR-175 java规范,如果注释在运行时不可用,则应该默默忽略它.但在Android API 15-16调用getDeclaredAnnotations()导致NoClassDefFoundError异常.在API 17+上,它无一例外地按预期工作.
请查看下面的示例项目了解详情
题
你会建议什么解决方法?你知道相关的Android bug报告吗?我找不到一个.
例
我们有一个带@Nullable注释的示例类:
public class SampleClass {
@Nullable
private String _content;
}
Run Code Online (Sandbox Code Playgroud)
@Nullable 在构建过程中可用,但是我们将它从apk中排除(切割方法计数),在我们这样做的例子中:
configurations {
provided
}
android.applicationVariants.all {
variant -> variant.javaCompile.classpath += configurations.provided
}
dependencies {
provided group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
}
Run Code Online (Sandbox Code Playgroud)
在MainActivity我们尝试从该_content字段获取所有注释:
Class clazz = SampleClass.class;
Field[] fields = clazz.getDeclaredFields();
Field field = clazz.getDeclaredField("_content");
Annotation[] annotations = field.getDeclaredAnnotations(); // this line is throwing exception on …Run Code Online (Sandbox Code Playgroud) 在转移到Android Annotations v.2.7后,我在eclipse中构建项目时遇到了问题,同时maven构建还可以.这是来自eclipse错误日志的堆栈跟踪:
Error
Mon Nov 05 15:49:49 GMT+02:00 2012
Errors running builder 'Java Builder' on project 'heroes'.
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070)
at java.lang.Class.getAnnotation(Class.java:3029)
at javax.annotation.processing.AbstractProcessor.getSupportedSourceVersion(AbstractProcessor.java:103)
at org.eclipse.jdt.internal.compiler.apt.dispatch.ProcessorInfo.<init>(ProcessorInfo.java:56)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:94)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:116)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:820)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) …Run Code Online (Sandbox Code Playgroud)