我目前正在使用android-topeka示例项目来开发Android即时应用。
在“活动”中使用AndroidAnnotations后,一切都按预期进行:
@EActivity(resName = "activity_start")
public class StartActivity extends AppCompatActivity {
...
}
如果我要启动应用(:installed
),则一切正常,但是对于 instant-app (:instant
),我收到以下错误:
:base:javaPreCompileDebugFeature UP-TO-DATE
error: The generated <applicationId>.R class cannot be found
1 error
:base:compileDebugFeatureJavaWithJavac FAILED
其他信息:
如果我移除了基座中的
application project(':installed')
build.gradle我可以启动即时应用,但是输入错误 application-id (在:installed
项目中配置)。
答案 0 :(得分:1)
最后,借助此issue跟踪器(对Kay-Uwe Janssen表示感谢),我明白了。也要杰西。总体而言,是结合了清单查找器和annotationProcessorOptions
的设置。
这是我的gradle / Manifest设置的样子:
基础:
build.gradle:
android {
...
baseFeature true
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = ["resourcePackageName": "com.test.base"]
}
}
}
buildTypes {
release {
}
}
}
dependencies {
application project(':installed')
...
}
AndroidManifest.xml:
<manifest ...
package="com.test.base">
...
</manifest>
已安装:
build.gradle:
android {
...
}
dependencies {
implementation project(':base')
}
AndroidManifest.xml:
<manifest package="com.test2">
</manifest>
即时:
build.gradle:
android {
defaultConfig {}
}
dependencies {
implementation project(':base')
}
使用此设置,即时应用程序具有与已安装的一个“ com.test2”相同的应用程序ID。
答案 1 :(得分:0)
基于此SO related post:
修改applicationId
时会发生此错误。示例中提供的脚本假定您已声明android.defaultConfig.applicationId
。如果未声明,则该值为 null 或生成 null.R 。
defaultConfig { // Rest of Config javaCompileOptions { annotationProcessorOptions { arguments = ["resourcePackageName": "<Original Package Name>"] } } }
注意:原始Package Name
应该与R
在您的活动中的位置相同。