小编Den*_*ich的帖子

Retrolambda:在使用带有retrolambda的lambda表达式时,Lint崩溃

我试图用retrolambda沿gradle这个-retrolambda插件.一般来说它工作正常,但是当我编译发布时,该lint阶段失败,异常:

:playground.dagger:lintVitalReleaseFailed converting ECJ parse tree to Lombok for file D:\....\playground\dagger\MainActivity.java
java.lang.UnsupportedOperationException: Unknown ASTNode child: LambdaExpression
    at lombok.ast.ecj.EcjTreeVisitor.visitOther(EcjTreeVisitor.java:368)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:364)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitMessageSend(EcjTreeConverter.java:1042)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:156)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.toBlock(EcjTreeConverter.java:397)
    at lombok.ast.ecj.EcjTreeConverter.access$1500(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.visitMethodDeclaration(EcjTreeConverter.java:1241)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:152)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252)
    at lombok.ast.ecj.EcjTreeConverter.access$100(EcjTreeConverter.java:141)
    at lombok.ast.ecj.EcjTreeConverter$2.createNormalTypeBody(EcjTreeConverter.java:563)
    at lombok.ast.ecj.EcjTreeConverter$2.visitTypeDeclaration(EcjTreeConverter.java:486)
    at lombok.ast.ecj.EcjTreeVisitor.visitEcjNode(EcjTreeVisitor.java:48)
    at lombok.ast.ecj.EcjTreeConverter.visit(EcjTreeConverter.java:295)
    at lombok.ast.ecj.EcjTreeConverter.toTree(EcjTreeConverter.java:236)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:282)
    at lombok.ast.ecj.EcjTreeConverter.fillList(EcjTreeConverter.java:252) …
Run Code Online (Sandbox Code Playgroud)

android lint android-lint android-gradle-plugin retrolambda

43
推荐指数
2
解决办法
7133
查看次数

Angular2:用组件模板替换host元素

我是新手angular,angular2特别是.我正在尝试编写一个容器组件,其中应包含子组件.

例如,容器组件:

@Component({
  selector: 'my-list',
  template: `
    <ul>
      <ng-content></ng-content>
    </ul>
  `
})
export class MyList {
}
Run Code Online (Sandbox Code Playgroud)

子组件:

import { Component } from 'angular2/core'

@Component({
  selector: 'my-item',
  template: `
    <li>
      <ng-content></ng-content>
    </li>
  `
})
export class MyItem {
}
Run Code Online (Sandbox Code Playgroud)

我想做这个结构:

<my-list>
    <my-item>One</my-item>
    <my-item>Two</my-item>
</my-list>
Run Code Online (Sandbox Code Playgroud)

要呈现给以下一个:

<my-list>
    <ul>
        <li>One</li>
        <li>Two</li>
    </ul>
</my-list>
Run Code Online (Sandbox Code Playgroud)

但相反,我有容器的主机元素和保留的项目:

<my-list>
    <ul>
        <my-item>
            <li>One</li>
        </my-item>
        <my-item>
            <li>Two</li>
        </my-item>
    </ul>
 </my-list>
Run Code Online (Sandbox Code Playgroud)

Plunk可在这里找到

问题:有没有办法消除宿主元素并只留下渲染模板?

angular2-directives angular2-template angular

29
推荐指数
2
解决办法
2万
查看次数

如何防止Android应用程序因后台线程中的异常而崩溃?

这是一个普遍的问题,从具体情况中提出,但我想得到一般答案如何处理以下情况:

背景:

我有一个应用程序,它使用一些第三方库(广告网络提供商SDK - 特别是 - AdMobSDK,基于Google Play Services).该库的功能对于应用程序并不重要.该库创建一个或多个后台工作线程.有时(非常罕见的情况),其中一个后台线程中存在未处理的异常,从而导致应用程序崩溃.我想忽略由此库引起的所有异常,无论其原因如何:在最坏的情况下,应用程序用户将看不到广告 - 它比应用程序崩溃要好得多.

由于库本身创建了后台线程 - 我不能通过try/catch包装它们.

题

有没有办法捕获所有非处理后台(非主要)线程异常,只是为了在这种情况下杀死线程,并防止应用程序崩溃?

相关问题

我看到了很多的几个问题,但有些过于具体(而不是覆盖我的情况),其他参考状况的时候,开发者对线程创建一个控制,并能包住整个线程与try/catch语句.如果我仍然错过相关问题,涵盖此案例,我将非常感谢这个链接

java crash multithreading android exception

14
推荐指数
1
解决办法
1万
查看次数

pip:从特定目录卸载软件包

我使用包安装到特定的本地目录pip install -t <dir>.

现在我想卸载它,但我找不到从该特定目录卸载的方法.因为uninstall没有有效的选项-t | --target,存在于install命令中.

python uninstall pip

14
推荐指数
1
解决办法
1万
查看次数

Gradle:将参数传递给`apply from:<file>`

我想将一些常见的样板gradle脚本代码放入共享.gradle文件中.然后,我可以使用apply from:语句重用它.

问题是是否可以将参数传递给应用脚本?例如,我想重复使用以下锅炉板:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'org.robolectric'

configurations {
    apt
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在这里:apply plugin: 'com.android.application'.我想将这个代码重用于应用程序项目或android库项目.所以我需要一些参数来决定应用哪个插件:

// assuming <isApplicationProject> - is a script parameter
if (isApplicationProject) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以在这种特殊情况下定义一些项目级属性,但我想知道是否可以在脚本调用时传递参数

android gradle

9
推荐指数
1
解决办法
2033
查看次数

Maven/Retrolambda:如何检测Java 8类的依赖关系

背景:

我们有maven基于Java的项目,它以JRE 1.7为目标,但源代码使用lambdas,因此我们用它retrolambda来转换Java 8源代码Java 7.当我们需要stream,function.*,Optional等时,我们也使用StreamSupport backport库.

用法retrolambda包括将项目的源语言和目标语言级别配置为1.8.

如果对java8类或方法(比如不依赖一切工作正常java.util.stream.*,java.util.Optional或方法引入java8类似Collection.forEach).如果有这样的用法然后构建传递,但它在运行时失败,当在Java 8的JVM下运行时.

题:

我的目标是在存在此类依赖项的情况下使构建失败.有没有办法Java 8在构建时检测新类/方法的依赖?

我想到了两个可能的选择,但我不确定它们中的任何一个是否可行:

  1. 某种字节码分析器,用于检测预定义类和方法的依赖性.有这样的工具/ maven插件吗?
  2. Lint(lint4j)规则.不确定是否可以使用检测对类/方法的依赖性lint

java lint maven java-8 retrolambda

8
推荐指数
1
解决办法
588
查看次数

Angular:使用ComponentFactoryResolver进行组件的动态实例化,在SVG内部渲染

我有一个呈现DOM的组件,该组件应位于svg标记内:

import { Component, Input } from '@angular/core';

@Component({
  selector: 'g[hello]',
  template: `<svg:text x="50%" y="50%" text-anchor="middle">Hello, {{name}}</svg:text>`,
  styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent  {
  @Input() name: string;
}
Run Code Online (Sandbox Code Playgroud)

当我静态实例化它时,一切正常(文本在页面上可见):

<svg>
  <svg:g hello name="Static component"></svg:g>
</svg>
Run Code Online (Sandbox Code Playgroud)

生成以下DOM:

<svg _ngcontent-iej-c129="">
  <g _ngcontent-iej-c129="" hello="" name="Static component" _nghost-iej-c130="" ng-reflect-name="Static component">
    <text _ngcontent-iej-c130="" text-anchor="middle" x="50%" y="50%">
      Hello, Static component
    </text>
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用ComponentFactoryResolver动态实例化组件时,问题就开始了:

<svg>
  <ng-container #container></ng-container>
</svg>
Run Code Online (Sandbox Code Playgroud)
import { Component, ViewChild, ViewContainerRef, ComponentFactoryResolver, OnInit } from '@angular/core';
import { …
Run Code Online (Sandbox Code Playgroud)

html svg angular

7
推荐指数
1
解决办法
504
查看次数

Android Studio/gradle:为android自动调整图像大小

我使用的是Android Studio带Gradle.

我想知道是否有任何方法可以在构建时自动调整不同分辨率的图像大小.我的意思是有一组图像,并自动调整到不同的分辨率(例如xxhdpi,xhdpi,hdpi,mdpi,ldpi)

完美的解决方案是拥有一些gradle插件,可以配置为在构建之前在适当的文件夹中生成调整大小的图像 apk

android image gradle android-studio

6
推荐指数
1
解决办法
1712
查看次数

使用Proguard删除Google Play服务库中未使用的类

我正试图摆脱Google Play Services库中未使用的类.我用单个空活动创建了全新的android项目.该项目不使用Google Play Services库中的任何内容.所以我希望,当我构建版本(包括在我的配置中运行proguard)时,我会看到二进制大小与构建有/无play-services依赖关系没有区别.但实际上,我看到apk大小差异大约为700 KB .

我找到了相对复杂的解决方案,使用gradle脚本,其中涉及重新打包play-services.jar文件.此外,此解决方案需要明确指定不会使用的每个包.但我不明白为什么不在proguard我的案件中做这项工作?

的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 21
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    // !!! when I comment the line below, release APK is 700 KB smaller !!! //
    compile 'com.google.android.gms:play-services:6.5.87'
}
Run Code Online (Sandbox Code Playgroud)

proguard-rules.pro:

-assumenosideeffects class android.util.Log {
    public static *** d(...); …
Run Code Online (Sandbox Code Playgroud)

android proguard google-play-services build.gradle android-gradle-plugin

6
推荐指数
1
解决办法
4215
查看次数

ES6:重新定义导出的功能

给定一个第三方库,该库导出一个函数并在其内部逻辑中使用此函数-是否有任何方法可以重新定义此函数?例如:

third-party.js

export function a() {
 console.log('a');
}

export function b() {
 a();
}
Run Code Online (Sandbox Code Playgroud)

my-module.js

import * as tp from 'third-party';

//Re-define, something like this
Object.defineProperty(tp, 'a', { writable: true, value: () => console.log('c')});

//Call b and get the re-define function called
tp.b(); //Expected output: 'c'
Run Code Online (Sandbox Code Playgroud)

一些要点:

  • 我不需要它进行测试,但可以用于生产(是的,我知道这将是一个肮脏的hack)
  • 是的,我知道导入是实时只读视图,我正在寻找一种解决方法来克服此限制
  • 不,我不能更改第三方库的代码
  • 我需要进行更改才能真正更改第三方的逻辑。我想调用一个调用 a而不是a本身的函数。

javascript ecmascript-6 es6-modules

6
推荐指数
1
解决办法
122
查看次数