小编cre*_*n90的帖子

在Android Studio和Gradle中的Android App模块中使用不同的构建类型的库模块

我有一个工作区,包含几个不同的应用程序和一个公共的库项目,我希望从Eclipse转换为Android Studio,从Ant转换为Gradle.目前,在我们的ant脚本中,我们会在编译之前替换一些类中的文本,具体取决于构建是用于调试目的,QA,Beta /客户验收测试还是用于发布到Google Play.

我想利用Gradle中的构建变体系统并使用值资源(布尔值,字符串等)来防止构建脚本替换我的类中的文本.

由于在我的所有应用产品中复制所有构建类型的不同值将是一个维护问题,我想将它们放在我的公共库中的构建类型中.我尝试了这个,但无论我在我的app模块中使用哪种构建类型,app模块都会引入公共库模块的Release版本.

有没有什么办法可以让app模块的不同构建类型使用库模块的相应构建类型?

这是从Android Studio运行的,其中Build Variants工具窗口将两个模块显示为使用调试变体.图像应该读取应用程序和库的调试.

调试调试

android build gradle android-studio

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

数据绑定注释处理器kapt警告

在我的app模块的build.gradle中,我添加了

dependencies {
kapt('com.android.databinding:compiler:3.1.2')
...
}
Run Code Online (Sandbox Code Playgroud)

但我仍然收到编译器警告

app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'com.android.databinding:compiler:3.1.2'.
Run Code Online (Sandbox Code Playgroud)

一切正常,我只是讨厌挂着警告.

任何帮助深表感谢!

android annotation-processing kotlin kapt

15
推荐指数
1
解决办法
6111
查看次数

Kotlin MutableStateFlow.collect 正在删除值

我有一个 Android 应用程序,在其中我尝试使用协程流来使用我自己的事件总线库替换现有的 Otto EventBus 。在设置 MutableStateFlow 的值然后在我的应用程序代码中收集时,我看到值被丢弃。我创建了一个更简单的项目来演示同样的问题。关于为什么值从 MutableStateFlow 中删除的任何想法?

项目的build.gradle

buildscript {
    ext.kotlin_version = "1.4.10"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.3'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
        classpath 'com.google.firebase:perf-plugin:1.3.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

应用程序模块的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-coroutines

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

Jetifier之后,Android Zendesk SDK v1脱机Messge Fragment布局无效

我一直在使用Zendesk v1 SDK和AndroidX和Jetifier,并且在更新到AS 3.3,Gradle版本4.10.1之后,在编译时出现错误,看来Jetifier在错误的生成文件中错误地转换了ID。错误中列出的行有2个编辑文本,其中两个都包含android:nextFocusDown =“ @ + id / ..”,这显然是无效的。下面的错误和Gradle文件

org.gradle.execution.MultipleBuildFailures: Build completed with 1 failures.
    at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:358)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:219)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:96)
    at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:55)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.run(RunAsBuildOperationBuildActionRunner.java:50)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30) …
Run Code Online (Sandbox Code Playgroud)

android zendesk android-jetpack androidx android-jetifier

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

使用Lambda找不到数据绑定事件的方法

到目前为止,我使用::表示法(即android:onClick="@{vm::doIt}")来处理事件,但这需要签名doIt具有不必要的View参数,最终我忽略了未使用的警告。我正在尝试清理它并移至lambda事件表示法(即`android:onClick =“ @ {()-> vm.doIt()}),但是编译器会引发异常。

layout.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="vm"
            type="com.myapp.ViewModel"/>
    </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{() -> vm.buttonClicked()}"
            <!--android:onClick="@{vm::buttonClicked}" worked with view param in buttonClicked in the viewModel -->
            android:text="@{vm.buttonText}"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />
    </android.support.constraint.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

ViewModel.kt

class ViewModel(): BaseObservable{

    //Bindings - All works great!

    //Event handler... not found, worked with commented param and :: notation
    fun buttonClicked(/*view: View*/){
        //Do button click stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

错误

e: …
Run Code Online (Sandbox Code Playgroud)

data-binding lambda android kotlin android-databinding

5
推荐指数
2
解决办法
4549
查看次数

Vector Drawable 不会被 Build Variant Flavor Dimension 覆盖

我有一个带有基本品牌和多个白标品牌以及多个服务器目标的应用程序。在我的应用程序的 build.gradle 中,口味定义为: flavorDimensions("server", "whitelabel")

在我src/main/res/drawable的基础品牌中,我有一个 logo.xml VectorDrawable,它在src/whitelabel1/res/drawable.

当我的应用程序的 build.config 包含vectorDrawables.useSupportLibrary = true正确的 logo.xml 时,将在我的 ImageView 中使用。如果我useSupportLibrary从 Whitelabel1main的 apk 中删除ImageView 渲染logo.xml

<ImageView
    android:id="@+id/imageLogo"
    android:layout_width="@dimen/viewXS"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/marginXS"
    android:adjustViewBounds="true"
    android:padding="@dimen/marginXS"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/ic_logo" />
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin android-vectordrawable build-variant

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

Android片段无法正常替换

我正在尝试使用片段构建3.0的应用程序.在应用程序的左侧有一个静态片段,在右侧有一个动态片段.动态部分中的每个片段都有一个标题.每当我去替换初始片段时,第一个的标题仍然显示在第一个标题的上方.连续替换替换下部但仍然显示初始标题(抱歉,我还不能发布图像).

我能做的最好的形象:

初始标题

新标题

内容(显示正常)

main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <fragment
        android:id="@+id/static_fragment"
        android:name="ruleout.android.History_Fragment"
        android:layout_width="500dp"
        android:layout_height="match_parent" />
    <fragment
        android:id="@+id/dynamic_fragment"
        android:name="ruleout.android.New_Screen_Fragment"
        android:layout_width="fill_parent"
        android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

部分MainActivity用于更改片段

private void open(Fragment toShow)
{
    FragmentTransaction fragmentTransaction = FragMag.beginTransaction();
    fragmentTransaction.replace(R.id.dynamic_fragment, toShow);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)

如果您需要任何其他信息,请告知我们,并提前感谢您的帮助.

android fragment android-fragments

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