标签: android-module

无法从另一个模块调用方法:Android studio

我在android studio中有两个模块

  1. 标准的Android 应用模块
  2. 域模块

域模块已添加到settings.gradlebuild.gradle

include ':mobile', ':domain'& compile project(':domain')分别是这样

在域模块中我有一个这样的类:

public class DomainUtils {

    Context mContex;
    public DomainUtils(Context context){
        this.mContex = context;
    }
    public  void toast(String string){
        Toast.makeText(mContex, string,Toast.LENGTH_LONG).show();
    }
    public String returnHi(){
        return "hi";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我试着打电话的时候 new DomainUtils(context).toast("hi");

App模块中的一个类:

  1. DomainUtils中的方法不会执行
  2. 程序流程不会继续到调用类的下一行(程序流程停止"
  3. 我没有在logcat中看到任何错误日志.

------------ 但是 ----------

当我运行该方法returnHi()它工作正常.

android android-module

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

如何在 Android 模块之间共享使用 annotationProcessor 的依赖项?

我有一个 Android 应用程序模块 (A) 和一个 Android 库模块 (B)。(A) 和 (B) 都包含这些相同的依赖项:

dependencies {
   implementation 'com.jakewharton:butterknife:8.8.1'
   annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的项目中,模块 (A) 依赖于模块 (B),因此我确实在堆栈溢出中搜索了有关如何实现Don't Repeat Yourself设计模式的信息,以便我仅将这些依赖项包含在模块 (B) 中,我发现很有用但我没有找到我怎么能做出这种依赖

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1
Run Code Online (Sandbox Code Playgroud)

在这两个模块之间共享,那么我该怎么做呢?

android android-gradle-plugin annotation-processor android-module

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

使用'com.android.test'插件构建测试测试后出现错误

在最后一阵子,我试图更改一个多模块Android应用程序以使用新的com.android.dynamic-feature插件。这项更改的一部分是将我的仪器测试移出了基本模块,并让他们测试了多个功能。该com.android.test 插件似乎使我能够做到这一点。

我必须注意到,虽然从androidTest源集(使用app:assembleDebugAndroidTest)构建时运行正常的同一测试会在从com.android.test插件(使用app-tests:assemble)构建时导致奇怪的错误。特别是,当测试启动Activity时,AndroidX AppCompat存在问题:

Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
    at androidx.appcompat.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:756)
    at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:196)
    at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
    at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:260)
    at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:182)
    at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520)
    at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
    at biz.laenger.android.foo.app.presentation.main.MainActivity.onCreate(MainActivity.kt:28)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
    ... 9 more
Run Code Online (Sandbox Code Playgroud)

我创建了这个最小的示例项目,可以在其中复制问题(自述文件中的步骤)。

从主题出现实际问题时,我发现了上述错误。但是,正确设置了主题,并且在“常规”测试测试和手动启动应用程序时可以很好地进行“活动创建”。该应用程序和测试在API 28设备上运行。

在配置:app-tests模块时,我按照说明进行操作并最终得到以下配置

Caused by: java.lang.IllegalStateException: This app has been …
Run Code Online (Sandbox Code Playgroud)

android-testing android-espresso android-module androidx

5
推荐指数
0
解决办法
213
查看次数

如何覆盖模块中的 gradle 子项目配置?

我的模块化 Android 项目subprojects在根 build.gradle 中使用,以最小化每个子模块的 build.gradle 中所需的配置。例如,我可以使用它来将我们的自定义 buildType 添加到每个模块

subprojects 
    afterEvaluate { project ->

        if (project.plugins.findPlugin('android') ?: project.plugins.findPlugin('android-library')) {
            android {
                buildTypes {
                    qa {
                        initWith debug
                        matchingFallbacks = ['debug']
                    }
                }
            }
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

我的假设是,如果我还将此构建配置添加到模块级别 build.gradle 中,它将覆盖项目级别定义的配置。然而,情况似乎并非如此。

如果我将以下内容添加到我的app / build.gradle时,我的应用程序将在选择qa buildtype时,请结束后缀'dev'。

buildTypes {
        debug {
            applicationIdSuffix = ".dev"
            signingConfig signingConfigs.debug
        }

        qa {
            initWith debug
            applicationIdSuffix = ".qa"
            matchingFallbacks = ['debug']
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我尝试在模块中使用特定于 buildType 的 buildConfigFields 时,同样的问题也适用;他们被忽略了。 …

android gradle android-gradle-plugin android-module

5
推荐指数
0
解决办法
457
查看次数

如何在android studio中将android模块转换为java模块

我为我的 android 应用程序创建了三个模块,即应用程序、域和数据。

我错误地将域和数据模块创建为 android 模块而不是 Java 模块。现在我想将它们替换为 Java 模块。

谁能建议我如何实现这一目标?

在此处输入图片说明

android android-studio android-module

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

Android Studio - 如何在 Java/Kotlin 模块中指定“-jvm-target”选项?

最近,我试图为我的 Android 应用程序创建一个 Java/Kotlin 模块。当我创建 Retrofit 时Interceptor,出现错误:

无法将使用 JVM 目标 1.8 构建的字节码内联到使用 JVM 目标 1.6 构建的字节码中。请指定正确的“-jvm-target”选项。

这是确切错误的屏幕截图:

在此输入图像描述

我知道如何设置-jvm-target我的 Android 模块。但我无法找到如何在 Java/Kotlin 模块中设置它的答案。


这是我已经尝试过的:

[解决方案1(不起作用)]

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

compileKotlin {
    targetCompatibility(JavaVersion.VERSION_1_8)
}
Run Code Online (Sandbox Code Playgroud)

[解决方案2(不起作用)]

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我以下错误:

找不到参数的 kotlinOptions() 方法

android gradle android-studio android-module

2
推荐指数
1
解决办法
5531
查看次数

Jetpack Compose 预览在多模块应用程序中失败

我有一个多模块应用程序,最近我开始在其中实现 Jetpack Compose。我定义了一些由不同模块共享的可组合项。我将它们放在另一个库模块中并导入到相关位置。可组合示例:

// Nothing special here, any composable function fails the same way
@Composable
fun AppTheme(content: @Composable () -> Unit) {
    val appColors = lightColors(
        primary = Blue
    )
    MaterialTheme(colors = appColors, content = content)
}
Run Code Online (Sandbox Code Playgroud)

一切似乎都工作正常,除了所说的可组合项无法构建预览:

@Preview(showSystemUi = true, showBackground = true)
@Composable
fun HistoryScreenPreview() {
    AppTheme {
        HistoryScreen()
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果我删除“AppTheme”,预览效果会非常好。

堆栈跟踪:

java.lang.NoSuchMethodError: 'void com.somepackage.lib.ui_theme.AppComposablesKt.AppTheme(_layoutlib_._internal_.kotlin.jvm.functions.Function2, androidx.compose.runtime.Composer, int)'
at com.somepackage.feature.home.ui.history.view.HistoryFragment.HistoryScreenPreview(HistoryFragment.kt:238)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableMethod(CommonPreviewUtils.kt:150)
at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection$ui_tooling_release(CommonPreviewUtils.kt:194)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:593)
at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:591)
at …
Run Code Online (Sandbox Code Playgroud)

android-module android-jetpack-compose android-jetpack-compose-preview

2
推荐指数
1
解决办法
2508
查看次数

在 android 模块中使用应用程序样式

我有一个带有一些自定义组件的模块。其中一个里面有一个 DatePickerDialog。我需要为这些使用自定义强调色。如何从主应用程序样式中检索颜色?有没有办法使用相同的样式避免循环引用?否则,有一种方法可以以编程方式设置 DatePickerDialog 的强调色吗?

android datepickerdialog android-styles android-module

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

为什么模块没有显示在应用程序模块依赖项中

我正在尝试在我的主应用程序中添加模块,但它没有显示在选择部分中。我正在使用 android studio 3.4.1

安卓根目录

安卓root

梯度设置

梯度设置

模块依赖 在此输入图像描述

android android-module

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

非 android 模块清洁架构设置中的 Hilt

我有一个多模块化 android 应用程序设置,它由一个数据、域和演示模块组成。域模块是纯 Java 的。我知道可以通过添加以下内容来支持非 android 模块中的刀柄:

领域 build.gradle

implementation "com.google.dagger:hilt-core:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"
Run Code Online (Sandbox Code Playgroud)

域模块提供了 UseCase 类的实现,这些类应该注入到位于 Presentation (app) 模块中的 ViewModel 中。

域模块:

@Module
@InstallIn(SingletonComponent::class)
//   @InstallIn(ViewModelComponent::class)
object UseCaseModule {

    @Provides
    //    @ViewModelScoped
    fun provideGetMovieDetailsUseCase(
        movieRepository: MovieRepository
    ): GetMovieDetailsUseCase {
        return GetMovieDetailsUseCaseImpl(movieRepository)
    }
}
Run Code Online (Sandbox Code Playgroud)

演示模块:

@HiltViewModel
class MovieDetailViewModel @Inject constructor(
    private val getMovieDetailsUseCase: GetMovieDetailsUseCase
) : ViewModel() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于 java-only 模块的性质,我不能使用@InstallIn(ViewModelComponent::class)注释。相反,我必须在SingletonComponent::class. 这也是在这里的 awnser 中完成的

我的问题

这种方法是“最佳实践”吗?还是将库设为 Android 库更好,以便我可以将依赖范围限定为 ViewModel?我更愿意将它保留为仅限 Java 的库。

java android kotlin android-module dagger-hilt

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