Android注释和applicationIdSuffix

8

最近我一直在尝试使用Android annotations,一切都很顺利,直到我决定在build.gradle文件中的buildTypes中添加applicationIdSuffix。目前它看起来是这样的:

buildTypes {
    debug {
        applicationIdSuffix '.debug'
    }

    ...
}

编译时,我在gradle控制台中看到以下日志:
:app:preDebugBuild已更新 :app:checkDebugManifest :app:preReleaseBuild已更新 :app:pre_testBuild已更新 :app:prepareComAndroidSupportAppcompatV72220Library已更新 :app:prepareComAndroidSupportSupportV42220Library已更新 :app:prepareDebugDependencies :app:compileDebugAidl已更新 :app:compileDebugRenderscript已更新 :app:generateDebugBuildConfig已更新 :app:generateDebugAssets已更新 :app:mergeDebugAssets已更新 :app:generateDebugResValues已更新 :app:processDebugGoogleServices 找不到匹配的客户端名称'org.me.myapp.debug' :app:generateDebugResources :app:mergeDebugResources已更新 :app:processDebugManifest已更新 :app:processDebugResources已更新 :app:generateDebugSources已更新 :app:processDebugJavaRes已更新 :app:compileDebugJavaWithJavac 注意:将日志文件解析为/dir/myapp/app/build/generated/source/apt/androidannotations.log 注意:使用选项{androidManifestFile=/dir/myapp/app/build/intermediates/manifests/full/debug/AndroidManifest.xml}初始化AndroidAnnotations 3.3.1 注意:开始处理18个元素上的4个注释 发现具有指定路径的AndroidManifest.xml文件:/dir/myapp/app/build/intermediates/manifests/full/debug/AndroidManifest.xml 找到AndroidManifest.xml:AndroidManifest[applicationPackage=org.me.myapp.debug,componentQualifiedNames=[org.me.myapp.ui.MainActivity_,net.hockeyapp.android.UpdateActivity],permissionQualifiedNames=[android.permission.ACCESS_WIFI_STATE,android.permission.ACCESS_NETWORK_STATE],applicationClassName=null,libraryProject=false,debugabble=false,minSdkVersion=15,maxSdkVersion=-1,targetSdkVersion=22] 错误:找不到生成的org.me.myapp.debug.R类 注意:找到Android类:android.R 注意:时间测量:[整个处理= 15 ms],[提取清单= 4 ms],[提取注释= 3 ms] 注意:完成处理 注意:开始处理0个元素上的0个注释 注意:时间测量:[整个处理= 0 ms] 注意:完成处理 1个错误 失败 构建失败并出现异常: * 出了什么问题: 任务':app:compileDebugJavaWithJavac'执行失败。

我已经尝试过再次清理和构建,从项目中删除generated目录,但都没有起到任何帮助作用。如果我从build.gradle文件中移除applicationIdsuffix,一切都可以正常工作。请问我该如何解决这个问题?

2个回答

22

对于我来说,这是因为google-services.json引用了我的生产包名称。目前最好的解决方案似乎是编写自己的gradle任务以在文件的releasedebug版本之间切换,或者在该文件中包含两个包名称:

不同productFlavors的google-services.json


9

请从您的build.gradle文件中删除此行:

resourcePackageName android.variant.applicationId

编辑:尝试将此行添加到您的apt块中:

resourcePackageName "org.me.myapp"

我没有这行代码。 - Mikhail
1
为避免使用硬编码的值,请将“resourcePackageName android.defaultConfig.applicationId”等内容作为资源。 - sakis kaliakoudas
但是我的问题通过在应用级别的build.gradle文件中的defaultConfig中提供正确的applicationId值来解决。 - Tanweer
是的,您需要默认应用程序ID,无论您如何传递它。这里的原始问题是使用了每个变体应用程序ID。实际上,AA需要清单包而不是应用程序ID,但大多数情况下,清单包与默认应用程序ID相同。 - WonderCsabo
@WonderCsabo,您知道如何配置这个新的annotationProcessor,但我没有使用apt。 - rkmax
@rkmax请阅读此线程。这里 - WonderCsabo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接