我有一个带有几个 gradle 模块的 android 项目。模块之间的依赖关系如下所示:
app <-- coremodule <-- featuremodule
coremodule中有资源(字符串和颜色)。
当我在功能模块的布局中使用它们时,一切正常,它们可用并且按预期工作。但是当我尝试从功能模块的 Activity 中以编程方式获取它们时,我得到一个异常:未解析的引用:R
所以android:text="@string/res_from_core_module" 有效和myTextView.setText(R.string.res_from_core_module) 无效。
有谁知道为什么会发生以及如何解决这个问题?
构建库模块。在使用库模块的示例应用程序中
\n\n@GlideModule\nclass DPAppGlideModule : AppGlideModule() {\n override fun isManifestParsingEnabled(): Boolean {\n return false\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并且在库模块中有:
\n\n@GlideModule\npublic final class LibGlideModule extends LibraryGlideModule {\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在库模块中它使用 GlideApp 生成的 api
\n\nfun ImageView.loadImg(imageUrl: String) {\nvar requestOptions : RequestOptions = RequestOptions()\nrequestOptions.diskCacheStrategy(DiskCacheStrategy.ALL)\nif (!TextUtils.isEmpty(imageUrl)) {\n GlideApp.with(this.context)\n .setDefaultRequestOptions(requestOptions)\n .load(imageUrl)\n .into(this)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n但由于这是库模块,不能与应用程序模块体面,所以无法编译
\n\n如何在库模块中使用GlideApp生成的api?
\n\n参考 \xe2\x80\x94 https://bumptech.github.io/glide/doc/configuration.html
\n我有一个名为 A 的 android 模块。我添加了对另一个模块 B 的依赖,如下所示implementation project(':B'):虽然模块 A 的构建没有问题,但当我尝试构建(并运行)集成测试时,我得到
Duplicate class org.xmlpull.v1.XmlPullParser found in modules kxml2-2.3.0.jar (net.sf.kxml:kxml2:2.3.0) and xpp3-1.1.3.3.jar (xpp3:xpp3:1.1.3.3)
Duplicate class org.xmlpull.v1.XmlPullParserException found in modules kxml2-2.3.0.jar (net.sf.kxml:kxml2:2.3.0) and xpp3-1.1.3.3.jar (xpp3:xpp3:1.1.3.3)
Duplicate class org.xmlpull.v1.XmlPullParserFactory found in modules kxml2-2.3.0.jar (net.sf.kxml:kxml2:2.3.0) and xpp3-1.1.3.3.jar (xpp3:xpp3:1.1.3.3)
Duplicate class org.xmlpull.v1.XmlSerializer found in modules kxml2-2.3.0.jar (net.sf.kxml:kxml2:2.3.0) and xpp3-1.1.3.3.jar (xpp3:xpp3:1.1.3.3)
Run Code Online (Sandbox Code Playgroud)
我试图org.xmlpull.kxml通过将导入语句更改为来排除
implementation (project(':B')) {
exclude group: 'org.xmlpull.v1'
}
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在。我已经没有主意了。有人可以帮忙吗?
我有一个带有主导航图的应用程序模块和带有它自己的导航图的功能模块。功能导航包含在主导航图中。因此功能片段和导航图对应用程序模块导航图一无所知。我需要将堆栈从主图中的特征片段 A 弹出到片段 B。实现这一目标的最佳方法是什么?
现在我正在将我的 Android 代码转换为模块化架构方法。尝试从“聊天”模块添加对“应用程序”模块的依赖项时遇到问题。
我有以下“app”模块的构建配置。
android {
lintOptions {
checkReleaseBuilds false
abortOnError false
}
signingConfigs {
companydevconfig {
keyAlias 'company'
keyPassword '123456'
storeFile file('../app/jksFils/company_dev.jks')
storePassword '123456'
}
companyqaconfig {
keyAlias 'company'
keyPassword '123456'
storeFile file('../app/jksFils/company_qa.jks')
storePassword '123456'
}
companyprodconfig {
keyAlias 'company'
keyPassword '123456'
storeFile file('../app/jksFils/release.keystore')
storePassword '123456'
}
}
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.company.employee.dev"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.13"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
aaptOptions {
cruncherEnabled = false
}
testOptions {
unitTests.returnDefaultValues = …Run Code Online (Sandbox Code Playgroud) android android-build build.gradle android-gradle-plugin android-module
Flutter 新创建的应用程序在使用 fire base 时出错。
我应该如何解决这个问题,因为它要求 Flutter 应用程序主活动无法转换为 android 应用程序活动。
04-05 21:16:07.570 27391-27391/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.firestoreflutterchat, PID: 27391
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.firestoreflutterchat/com.example.firestoreflutterchat.MainActivity}: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5097)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
at android.app.Instrumentation.newActivity(Instrumentation.java:1084)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at …Run Code Online (Sandbox Code Playgroud) android模块和风格之间的主要区别是什么?
来自模块定义 https://developer.android.com/studio/projects/add-app-module.html
模块为应用程序的源代码、资源文件和应用程序级别设置(例如模块级别构建文件和 Android 清单文件)提供容器。每个模块都可以独立构建、测试和调试。
但对于口味我也可以说同样的话。
有人可以指出这两者之间的主要区别吗?
我已经制作了一个自定义模块,并使用“ api”配置在其中包含了tensorflow-lite依赖项。我建立它的aar。现在,我创建一个新项目并将aar放在libs文件夹中。但是我只能访问我创建的类,而不能访问tensorflow api。如何在不再次包含传递依赖项的情况下使用传递依赖项?
我在博客(https://medium.com/mindorks/implementation-vs-api-in-gradle-3-0-494c817a6fa)中将其替换为“ api” 。
build.gradle(模块:mylib)
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
aaptOptions{
noCompress "tflite"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api 'androidx.appcompat:appcompat:1.1.0-alpha04'
api 'org.tensorflow:tensorflow-lite:0.0.0-gpu-experimental'
}
Run Code Online (Sandbox Code Playgroud)
build.gradle(模块:新项目中的两个):
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner …Run Code Online (Sandbox Code Playgroud) android android-library android-gradle-plugin android-module
在我的应用程序中,我有两个模块:app和repository。
repository依赖于 Room,并且有一个GoalRepository接口:
interface GoalRepository
Run Code Online (Sandbox Code Playgroud)
和一个GoalRepositoryImpl内部类,因为我不想将它或 Room 依赖项暴露给其他模块:
@Singleton
internal class GoalRepositoryImpl @Inject constructor(private val dao: GoalDao) : GoalRepository
Run Code Online (Sandbox Code Playgroud)
app取决于repository获取一个GoalRepository实例。目前,
我有一个:GoalRepositoryModule
@Module
class GoalRepositoryModule {
@Provides
@Singleton
fun provideRepository(impl: GoalRepositoryImpl): GoalRepository = impl
@Provides
@Singleton
internal fun provideGoalDao(appDatabase: AppDatabase): GoalDao = appDatabase.goalDao()
@Provides
@Singleton
internal fun provideDatabase(context: Context): AppDatabase =
Room.databaseBuilder(context, AppDatabase::class.java, "inprogress-db").build()
}
Run Code Online (Sandbox Code Playgroud)
问题是这不会编译(显然),因为公共provideRepository函数正在公开GoalRepositoryImpl,即一个internal类。
如何构建我的 Dagger …
我有一个主应用程序模块“app1”和一个以“process:SecondActivity”开头的第二个模块“app2”。我需要使用广播接收器从 SecondActivity 发送消息,但该消息不在 onRecive 中。广播接收器位于模块“tools”中,模块“app1”和“app2”依赖于模块“tools”。
我的广播接收器
class ExportReceiver : BroadcastReceiver() {
companion object {
const val ACTION_EXPORT = "ACTION_EXPORT"
@JvmStatic
fun getIntentFilters() = IntentFilter(ACTION_EXPORT)
}
@FunctionalInterface
interface OnExport {
fun onExport(uri: Uri)
}
private var mExport : OnExport? = null
override fun onReceive(context: Context?, intent: Intent?) {
intent?.let {
if (it.action == ACTION_EXPORT) {
it.data?.let { uri ->
mExport?.onExport(uri)
}
}
}
}
fun setExport(export: OnExport) {
mExport = export
}
}
Run Code Online (Sandbox Code Playgroud)
将接收器注册到“app1”
mExportReceiver = new ExportReceiver();
mExportReceiver.setExport(uri -> {}); …Run Code Online (Sandbox Code Playgroud) android-module ×10
android ×8
build.gradle ×1
dagger ×1
dagger-2 ×1
firebase ×1
flutter ×1
gradle ×1
java ×1