小编cur*_*hov的帖子

如何在kotlin中使用Android支持typedef注释?

我开发Android应用程序并经常使用注释作为编译时参数检查,主要是android的支持注释.

java代码中的示例:

public class Test
{
    @IntDef({Speed.SLOW,Speed.NORMAL,Speed.FAST})
    public @interface Speed
    {
         public static final int SLOW = 0;
         public static final int NORMAL = 1;
         public static final int FAST = 2;
    }

    @Speed
    private int speed;

    public void setSpeed(@Speed int speed)
    {
        this.speed = speed;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于Android中的性能问题,我不想使用枚举.kotlin的自动转换器只生成无效代码.如何@IntDef在kotlin中使用注释?

android kotlin

33
推荐指数
3
解决办法
9369
查看次数

Android gradle插件(7.0.0-alpha15)删除了variantFilter属性,如何恢复功能?

当前的build.gradle.kts:

android {
  // ...
  variantFilter {
        ignore = run {
            val isSim = flavors[0].name == "sim"
            val isNet = !isSim

            val isU = flavors[1].name == "custom"
            val isMain = !isU

            val buildType  = buildType.name
            val isDebug    = buildType == "debug"
            val isRelease  = buildType == "release"

            (isSim && isRelease) ||
                    (isSim && isU)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在新版本的插件中创建类似的配置?

更新:使用答案,上面的代码如下:

    android {
        androidComponents.beforeVariants {
            it.enabled = run {
                val isSim = it.productFlavors[0].second == "sim"
                val isNet = !isSim

                val isU = …
Run Code Online (Sandbox Code Playgroud)

android gradle android-gradle-plugin gradle-kotlin-dsl

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

如何为android库生成javadoc,当它有依赖,也是aar库?

我有android库项目,这取决于其他Android库项目.我需要为库生成javadoc,但它失败了,因为gradle将javadoc类路径路径放到.aar位置,但javadoc需要.jar文件.

简化的gradle文件:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    configurations {
        javadocDeps
    }

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 23
        versionCode 1
        versionName "0.1.0"
    }
}

dependencies {
    compile 'com.android.support:support-v4:23.2.0'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.annimon:stream:1.0.7'
    javadocDeps 'com.android.support:support-annotations:23.2.0'
    javadocDeps 'com.nineoldandroids:library:2.4.0'
    javadocDeps 'com.android.support:support-v4:23.2.0'
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}    

task javadoc(type: Javadoc, dependsOn: explodeAars) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += configurations.javadocDeps
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts …
Run Code Online (Sandbox Code Playgroud)

android javadoc gradle android-library android-gradle-plugin

6
推荐指数
2
解决办法
3945
查看次数

如何为android gradle项目设置风味?神秘的重复类错误

我创建了一个简单的测试项目:目标是通过按下屏幕上的按钮来显示消息"hello".第一个flavor构建应该将消息写入系统日志.第二个风味构建应该显示带有消息的祝酒词.请问如何使用gradle实现这一目标?

我的build.gradle:

apply plugin: 'android'

android {
compileSdkVersion 19
buildToolsVersion "19.0.1"

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

productFlavors {
    toast {

    }
    log {

    }
}

sourceSets {

    main {
        java.srcDirs = ['src/main/java', 'src/log/java']
    }

    toast {
        java.srcDirs = ['src/main/java', 'src/toast/java']
    }
}

buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
Run Code Online (Sandbox Code Playgroud)

文件结构: 文件结构

Flavor log包含单类Messenger …

android build gradle

5
推荐指数
1
解决办法
3339
查看次数

通过build.gradle任务在项目目录中创建version.txt文件(gradle 5.0)

旧问题已过时(通过build.gradle任务在项目目录中创建version.txt文件)

我目前的任务:

task exportVersion {
    def file = project.layout.buildDirectory.file("version.txt")
    def f = file.get().asFile
    f.text = "$project.android.defaultConfig.versionName"
}
Run Code Online (Sandbox Code Playgroud)

这是一个稍微重写的任务,用于删除gradle 5.0的"不兼容"更改,但仍会显示警告:

不推荐使用DefaultSourceDirectorySet构造函数.计划在Gradle 5.0中删除.请使用ObjectFactory服务来创建SourceDirectorySet的实例.

不推荐使用ProjectLayout.directoryProperty()方法.计划在Gradle 5.0中删除.请改用ObjectFactory.directoryProperty()方法.

不推荐使用ProjectLayout.fileProperty()方法.计划在Gradle 5.0中删除.请改用ObjectFactory.fileProperty()方法.

如何使用ObjectFactory重写任务?该项目是一个Android应用程序,但我认为这不是变更任务.

gradle

5
推荐指数
1
解决办法
351
查看次数

在 kotlin 中使用 StringBuilder 的惯用方式?

我经常编写非常复杂的 toString() 方法,这个问题总是困扰着我——哪个变体更容易阅读。下面的例子是简化的,通常有很多条件,所以单行不适合。

1) 就像在普通的 Java 中一样:

val sb = StringBuilder()
sb.append(data)
val string = sb.toString()
Run Code Online (Sandbox Code Playgroud)

2) apply + toString() - 不是很漂亮吗?

val string = StringBuilder().apply {
    append(data)
}.toString()
Run Code Online (Sandbox Code Playgroud)

3) run + toString() 最后一条语句也不是很好

val string = StringBuilder().run {
    append(data)
    toString()
}
Run Code Online (Sandbox Code Playgroud)

4) ??

string idioms kotlin

4
推荐指数
1
解决办法
2638
查看次数

如果它们在AnimationListener的onAnimationEnd中启动,则动画会进入无限循环

简单的任务:通过按下按钮,它将X值缩放为0,当动画完成时,在第二个视图上开始另一个动画,将X从0缩放到1.应该播放1秒的反向动画,这就是全部.在下面运行代码我有动画第一部分的无限动画循环.

使用了nineoldandroids lib,但我认为这与原生动画框架至少在jelly bean设备上并没有什么不同.

public class MainActivity extends Activity
{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final View mybutton = findViewById(R.id.mybutton);
    final View myprogress = findViewById(R.id.myprogress);

    mybutton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            animate(mybutton).scaleX(0).setListener(new AnimatorListenerAdapter()
            {
                @Override
                public void onAnimationEnd(Animator animation)
                {
                    mybutton.setVisibility(View.INVISIBLE);
                    myprogress.setVisibility(View.VISIBLE);
                    ViewHelper.setScaleX(myprogress, 0f);

                    animate(myprogress).scaleX(1).setListener(new AnimatorListenerAdapter()
                    {
                        @SuppressWarnings("ConstantConditions")
                        @Override
                        public void onAnimationEnd(Animator animation)
                        {
                            mybutton.getHandler().postDelayed(new Runnable()
                            {
                                @Override
                                public void run()
                                {
                                    animate(myprogress).scaleX(0).setListener(new AnimatorListenerAdapter()
                                    {
                                        @Override
                                        public void onAnimationEnd(Animator animation)
                                        {
                                            myprogress.setVisibility(View.INVISIBLE);
                                            mybutton.setVisibility(View.VISIBLE);

                                            ViewHelper.setScaleX(mybutton, …
Run Code Online (Sandbox Code Playgroud)

animation android nineoldandroids

3
推荐指数
1
解决办法
1540
查看次数