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) 我有一个自定义视图持有另一个.层次:
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)
所以我可以在MyOuterView
XML中实例化组件,如:
<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
.
我想基于一个创建一个颜色对象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) 我在哪里可以找到android的源代码ConstraintLayout
?我无法在支持框架存储库中找到它,甚至在Google搜索中也找不到它.
我有一个关于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.properties
带apiKey
字段集的文件.但是在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版本但我注意到在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
我刚刚将Android Studio更新到最新版本3.5.1,并且知道出现以下错误:
Gradle同步失败:不支持的方法:KotlinPlatformContainer.supports()。您连接到的Gradle版本不支持该方法。要解决该问题,您可以更改/升级您连接到的Gradle的目标版本。或者,您可以忽略此异常并从模型中读取其他信息。
我在两个模块中使用Kotlin Multiplatform,但我不知道它是否相关。
我正在尝试将我正在构建的项目转换为使用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) 鉴于以下进口
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
失败。有没有办法解决这个问题?
我想使用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
android ×7
kotlin ×4
dagger-2 ×2
enums ×2
java ×2
crashlytics ×1
firebase ×1
import ×1
react-native ×1
sealed-class ×1