gpt4 book ai didi

java - 带有产品 flavor 和 Kotlin 的 ClassNotFoundException

转载 作者:IT老高 更新时间:2023-10-28 13:40:33 28 4
gpt4 key购买 nike

我有一个主要用 Kotlin 编写的项目,但有一些 java 类。项目现在进展顺利,我想增加在不同环境之间切换的可能性,为此我使用了各种风格:

 productFlavors {
prod {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'true'
applicationId = "com.myapp"
}

beta {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'true'
applicationId = "com.myapp.beta"
}

dev {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'false'
applicationId = "com.myapp.dev"
}

}

但是,当我在非生产环境中运行时(不会更改 applicationId),我得到一个 java 类的 ClassDefNotFoundException:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.myapp.beta.ui.view.ScrollBehavior" on path: DexPathList[[zip file "/data/app/com.myapp.beta-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.beta-1/lib/arm64, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 33 more

我正在使用带有 Kotlin 插件版本 1.1.3-2 的 Android Studio 3.0 beta 4。

构建文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' // Use experimental kapt implementation

repositories {
mavenCentral()
maven {
url "http://dl.bintray.com/ttymsd/maven"
}
maven { url 'https://jitpack.io' }
}
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {
applicationId "com.myapp"

minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion

versionCode 1
versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}

sourceSets {
main.java.srcDirs += 'src/main/java'
}


buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

flavorDimensions "default"
productFlavors {
prod {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'true'
applicationId = "com.myapp"
}

beta {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'true'
applicationId = "com.myapp.beta"
}

dev {
dimension "default"
buildConfigField 'boolean', 'FABRIC', 'false'
applicationId = "com.myapp.dev"
}

}


dataBinding {
enabled = true
}

dependencies {
(...)
}
}

list :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/MyTheme">


<activity
android:name=".ui.dashboard.DashboardListActivity"
android:launchMode="singleTop"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>


</application>

</manifest>

代码中的相关部分:

<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:layout_behavior=".ui.view.ScrollBehavior">

最佳答案

你将你的行为定义为

app:layout_behavior=".ui.view.ScrollBehavior"

这是一个相对的定义。在这种情况下,相对于应用程序包。

所以实际使用的名称是context.getPackageName() + name,因此您定义的应用程序ID用作前缀。

要加载正确的行为,您必须将其定义为完全限定名称

app:layout_behavior="com.myapp.ui.view.ScrollBehavior"

你也可以在这里使用字符串资源。

关于java - 带有产品 flavor 和 Kotlin 的 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com