我刚开始使用Kotlin并尝试使用Dagger2进行设置,我已经看到了一些例子,但它们似乎都不适合我。
我一直得到这个
错误:任务':app:kaptDebugKotlin'执行失败。
内部编译器错误。有关更多详细信息,请参阅日志
我有build.gradle(模块:app)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.exampleapp"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
kapt {
generateStubs = true
}
dexOptions {
javaMaxHeapSize "2048M"
}
}
ext {
supportLibVer = '25.0.0'
daggerVer = '2.8'
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// Support lib
compile "com.android.support:appcompat-v7:${supportLibVer}"
kapt "com.google.dagger:dagger-compiler:${daggerVer}"
compile "com.google.dagger:dagger:${daggerVer}"
provided "javax.annotation:jsr250-api:${javaxVer}"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
repositories {
mavenCentral()
}
答案 0 :(得分:16)
使用./gradlew clean build
命令运行您的应用程序,以查看代码的确切错误。只需将其粘贴到Android Studio的终端中即可。
答案 1 :(得分:3)
就我而言,我忘记了将会议室数据库实体添加到数据库中
@Database(version = 1,
entities = [DummyEntity::class]
)
答案 2 :(得分:3)
我遇到了这个问题一段时间。我的错误是在 @Inject 字段中使用了私有访问说明符。
如果您使用的是 Dagger,请检查 @Inject 私有字段或了解确切原因添加 --stacktrace --info --scan 作为命令行选项。
在 Mac 上,转到 Android Studio > 首选项 > 构建、执行、部署 > 编译器
在 Windows 上,转到文件 > 设置 > 构建、执行、部署 > 编译器
答案 3 :(得分:2)
为我工作:
我也遇到了同样的问题,并将其添加到gradle.properties中解决了
org.gradle.java.home=<go to project structure, copy JDK location and past here>
这可确保gradlew使用与Android Studio相同的JDK
答案 4 :(得分:2)
Issue 可以连接 Room 和 Kotlin 1.4.10。
尝试将 Room 依赖项的 android.arch.persistence
更改为 androidx.room
:
使用
kapt "androidx.room:room-compiler:$roomVersion"
代替
kapt "android.arch.persistence.room:compiler:$roomVersion"
答案 5 :(得分:1)
答案 6 :(得分:1)
就我而言build.gradle
替换
id
'kotlin-android-extensions'
到
id
'kotlin-parcelize'
正如它在 build
添加
buildFeatures {
viewBinding true
}
还有一些语法错误,比如在 Dao 忘记了 :
@Query("SELECT * FROM table_satis WHERE satisId ==:satisID")
答案 7 :(得分:1)
如果您使用 Hilt 和 Field Injection 然后从 Field Injected Object 中删除 Private 这对我有用
@Inject
private lateinit var helper: Helper
到
@Inject
lateinit var helper: Helper
答案 8 :(得分:0)
第一次更改
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
到
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
现在,您必须调整项目Gradle文件并更新所使用的Kotlin版本,如下所示:
ext {
kotlin_version = '1.3.10'
gradleVersion = '3.1.0'
}
答案 9 :(得分:0)
我有一段时间遇到了这个问题。读取构建选项卡对我大有帮助,因为它提供了库失败的原因。
这是标签
我有很多问题,
1.我尚未将我创建的新实体添加到@Database注释中
2.我尚未在界面中添加@Dao批注
3.我还没有更新在@Query注释中写入的一些变量名称
因此,我不得不逐个问题地解决问题,最后它可以稍后运行。
另外,我正在清理我的项目并重建以确保代码不会卡住。同时关闭并打开Android Studio。
更多,您可以检查此答案以帮助您找到错误enable more log on error
答案 10 :(得分:0)
我遇到了相同的错误,只需按照以下步骤操作即可解决
1-打开“文件”菜单->然后选择“项目结构”或按Ctrl + Alt + Shift + s
2-从左侧打开模块
3-在Source Compatibility中,按下拉菜单并选择Java 8或1.8
4-在“目标兼容性”中,按下拉菜单并选择Java 8或1.8
5-按“确定”,然后同步并重建您的项目或运行它
答案 11 :(得分:0)
我的错误是在函数返回suspend
时使用LiveData
。Room的协程集成带来了返回挂起值的功能,但是当值本身为asnyc时,则没有理由使用它。
我改变了:
@Delete
suspend fun Delete(premiumPackageDBEntity: PremiumPackageDBEntity)
@Query("SELECT * FROM available_premium_package ")
suspend fun GetAll(): LiveData<List<PremiumPackageDBEntity>>
至:
@Delete
suspend fun Delete(premiumPackageDBEntity: PremiumPackageDBEntity)
@Query("SELECT * FROM available_premium_package ")
fun GetAll(): LiveData<List<PremiumPackageDBEntity>>
问题解决了。
答案 12 :(得分:0)
该问题可能与 Room 的使用有关。我使用了 Łukasz Kobyliński 在他的评论中建议的命令
<块引用>./gradlew clean build
就我而言,我必须为日期类型添加一个转换器。
您可以在官方文档中找到转换器:https://developer.android.com/training/data-storage/room/referencing-data#type-converters
答案 13 :(得分:0)
就我而言,我忘记使用 Room 库将新创建的实体添加到@Database 声明的“实体”部分。
from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto import Random
import base64, os, binascii
def encrypt(key, plaintext):
iv = Random.new().read(AES.block_size)
iv_int = int(binascii.hexlify(iv), 16)
ctr = Counter.new(AES.block_size * 8, initial_value=iv_int)
aes = AES.new(key, AES.MODE_CTR, counter=ctr)
ciphertext = aes.encrypt(plaintext)
return ciphertext
key = base64.urlsafe_b64encode(os.urandom(22)) #Creates a 32 bytes AES-256 key
cipher = encrypt(key, b"Hello world")
print("Encrypted text:",cipher.decode('latin-1'))
命令行选项非常有助于找到确切原因。
答案 14 :(得分:0)
就我而言,我使用的是 ViewBinding 而不是 DataBinding。当我遇到同样的问题时,我通过向 gradle 添加插件 apply plugin: 'kotlin-parcelize'
来解决它。
答案 15 :(得分:0)
我刚刚遇到了一个类似的错误。如果您对 Room 使用旧的依赖项,请更新并重建您的项目。