小编Ben*_*min的帖子

WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'

I just upadated kotlin to 1.3.30 and I now get this error when syncing gradle:

WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'. It will be removed at the end of 2019. For more information, see https://d.android.com/r/tools/task-configuration-avoidance. To determine what is calling variant.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace. Affected Modules: hydatabase

Here is my build.gradle:

apply plugin: 'com.squareup.sqldelight'
apply plugin: 'kotlin-multiplatform'
apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    defaultConfig …
Run Code Online (Sandbox Code Playgroud)

kotlin android-gradle-plugin

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

如何在Android布局中按值而不是名称设置枚举属性?

我有一个自定义视图持有另一个.层次:

MyOuterView
->MyInnerView
Run Code Online (Sandbox Code Playgroud)

MyInnerView 有一个枚举属性,如:

<attr name="myAttr" format="enum">
    <enum name="foo" value="0"/>
    <enum name="bar" value="1"/>
</attr>
Run Code Online (Sandbox Code Playgroud)

所以我可以在MyOuterViewXML中实例化组件,如:

<com.example.MyInnerView
....
app:myAttr="foo"/>
Run Code Online (Sandbox Code Playgroud)

当然哪个有效.这MyOuterView为定制本身提供了一个论据.根据这个论点,我想设置一个参数MyInnerView.

希望的行为是我可以使用数据绑定,如:

<com.example.MyInnerView
....
app:myAttr="@{data.getMyAttr()}"/>
Run Code Online (Sandbox Code Playgroud)

其中getMyAttr()的样子:

public int getMyAttr() {
    return myAttr; // returns 0 or 1
}
Run Code Online (Sandbox Code Playgroud)

结果是编译问题.

****/数据绑定错误****消息:在com.example.MyInnerView上找不到参数类型为int的属性'app:myAttr'的setter

所以显然我不能通过值设置枚举,而只能通过名称设置枚举.除了以MyInnerView编程方式创建之外的任何想法 请注意,我无法改变MyInnerView.

java enums android android-layout android-databinding

18
推荐指数
1
解决办法
1076
查看次数

使用关联类型时密封类vs枚举

我想基于一个创建一个颜色对象Int.我可以使用sealed class和获得相同的结果,enum并且想知道一个是否比另一个好.

使用sealed class:

sealed class SealedColor(val value: Int) {
    class Red : SealedColor(0)
    class Green : SealedColor(1)
    class Blue : SealedColor(2)

    companion object {
        val map = hashMapOf(
            0 to Red(),
            1 to Green(),
            2 to Blue()
        )
    }
}

val sealedColor: SealedColor = SealedColor.map[0]!!
when (sealedColor) {
                is SealedColor.Red -> print("Red value ${sealedColor.value}")
                is SealedColor.Green -> print("Green value ${sealedColor.value}")
                is SealedColor.Blue -> print("Blue value ${sealedColor.value}")
            }
Run Code Online (Sandbox Code Playgroud)

使用enum:

enum …
Run Code Online (Sandbox Code Playgroud)

enums kotlin sealed-class

15
推荐指数
2
解决办法
3754
查看次数

ConstraintLayout源代码位于何处?

我在哪里可以找到android的源代码ConstraintLayout?我无法在支持框架存储库中找到它,甚至在Google搜索中也找不到它.

android android-constraintlayout

13
推荐指数
1
解决办法
1944
查看次数

设置Firebase + Crashlytics时,Android项目构建失败

我有一个关于Firebase+ Crashlytics+ 的问题Android.在Android Studio我收到以下错误:

org.gradle.api.GradleException:Crashlytics Developer Tools错误.com.crashlytics.tools.android.exception.PluginException:Crashlytics Developer Tools错误.java.lang.illegalArgumentException:Crashlytics发现了一个无效的API密钥:null.

我按照这里这里的说明进行操作.据我所知,我不需要apiKey在项目中设置Firebase并将负责这一点.但项目构建仍然失败并抱怨.我无法在网上找到适当的帮助.Crashlytics关于Firebase 的文档似乎也处于测试阶段.

我最接近的是有人建议我设置一个fabric.propertiesapiKey字段集的文件.但是在Firebase- > Crashlytics仪表板上我找不到这个API密钥.

有谁知道如何解决这个问题?

注1:我没有Firebase上项目的管理员权限.也许钥匙只对他们可见?

注2:这实际上是一个react-native项目.但这不应该真正有所作为,因为这纯粹是本机端配置.

编辑:app/build.gradle根据要求添加:

apply plugin: "com.android.application"
apply plugin: "io.fabric"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" // MANUAL CHANGE

import com.android.build.OutputFile
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false

android {

    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig …
Run Code Online (Sandbox Code Playgroud)

android firebase crashlytics react-native google-fabric

10
推荐指数
1
解决办法
673
查看次数

活动在Android 8.1中自行旋转并恢复正常

我的应用程序运行良好的所有Android版本但我注意到在Android 8.1.0(奥利奥)当我从纵向活动到横向活动的屏幕,当我按回按钮它显示异常行为.

屏幕从横向自动旋转并将其恢复正常.看起来Activity正在重新启动.

以下是清单文件中定义的活动.

<activity
    android:name=".Home.TrainingsActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|layoutDirection|locale"
    android:screenOrientation="portrait" />

<activity
    android:name=".Home.ProgrammeActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|layoutDirection|locale"
    android:screenOrientation="landscape" />
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-orientation android-8.1-oreo

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

Gradle同步失败:不支持的方法:KotlinPlatformContainer.supports()

我刚刚将Android Studio更新到最新版本3.5.1,并且知道出现以下错误:

Gradle同步失败:不支持的方法:KotlinPlatformContainer.supports()。您连接到的Gradle版本不支持该方法。要解决该问题,您可以更改/升级您连接到的Gradle的目标版本。或者,您可以忽略此异常并从模型中读取其他信息。

我在两个模块中使用Kotlin Multiplatform,但我不知道它是否相关。

kotlin android-studio kotlin-multiplatform

9
推荐指数
2
解决办法
477
查看次数

Dagger2:没有注射器工厂限制碎片

我正在尝试将我正在构建的项目转换为使用dagger-android API用于DI框架,但是当尝试使用@ContributesAnroidInjector注入片段时,我遇到了IllegalArgumentException的死胡同.

相关模块和组件包括在下面:

ApplicationComponent.java

@Singleton
@Component(modules = {AndroidSupportInjectionModule.class,
    ApplicationModule.class,
    ActivityBindingModule.class,
    DataManagerModule.class})
public interface ApplicationComponent extends AndroidInjector<MyApplication> {

DataManagerContract getDataManager();

void inject(MyApplication application);

@Component.Builder
interface Builder {

    @BindsInstance
    ApplicationComponent.Builder application(Application application);

    ApplicationComponent build();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ActivityBindingModule.java:

@Module
public abstract class ActivityBindingModule {

    @ActivityScope
    @ContributesAndroidInjector(modules = MainActivityModule.class)
    abstract MainActivity bindMainActivity();

    @ActivityScope
    @ContributesAndroidInjector(modules = SplashActivityModule.class)
    abstract SplashActivity bindSplashActivity();

    @ActivityScope
    @ContributesAndroidInjector(modules = LoginActivityModule.class)
    abstract LoginActivity bindLoginActivity();
}
Run Code Online (Sandbox Code Playgroud)

MainActivityModule.java

@Module
public abstract class MainActivityModule {

    @ActivityScope
    @Binds
    abstract MainActivityContract.Presenter provideMainActivityPresenter(MainActivityPresenter presenter);

    @FragmentScope
    @ContributesAndroidInjector …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2

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

Android Studio 不会按字典顺序重新排列导入

鉴于以下进口

import javax.inject.Inject
import kotlinx.android.synthetic.main.fragment.*
Run Code Online (Sandbox Code Playgroud)

control+ option+时,Android Studio 会重新排列为以下内容o

import kotlinx.android.synthetic.main.fragment.*
import javax.inject.Inject
Run Code Online (Sandbox Code Playgroud)

这不是按字典顺序排列的。由于这个原因,我的pre-commit钩子运行ktlint失败。有没有办法解决这个问题?

import android intellij-idea android-studio

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

使用Dagger 2提供功能依赖性

我想使用Dagger 2提供一个函数作为依赖项:

@Module
class DatabaseModule {

    @Provides
    @Singleton
    fun provideDatabase(application: Application, betaFilter: (BetaFilterable) -> Boolean): Database {
        return Database(application, BuildConfig.VERSION_CODE, betaFilter)
    }

    @Provides
    @Suppress("ConstantConditionIf")
    fun provideBetaFiler(): (BetaFilterable) -> Boolean {
        return if (BuildConfig.FLAVOR_audience == "regular") {
            { it.betaOnly.not() }
        } else {
            { true }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它似乎不起作用:

[dagger.android.AndroidInjector.inject(T)] kotlin.jvm.functions.Function1<? 
super com.app.data.BetaFilterable,java.lang.Boolean> 
cannot be provided without an @Provides-annotated method.
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

android functional-programming dependency-injection kotlin dagger-2

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