我有一个多味道项目,有"qa"和"prod"的味道.我需要根据构建类型和风格包含不同版本的库.
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Type-Product-Flavor-Build-Variant上的文档表明可以组合构建类型和风格,使用"flavorBuildCompile"表示法.但是,当我这样做时,我收到此错误:
Error:(88, 0) Gradle DSL method not found: 'qaDebugCompile()'
Run Code Online (Sandbox Code Playgroud)
我很确定这曾经有用(在较旧版本的gradle中).目前使用gradle 2.1.如果做到这一点的方式发生了变化,我还没有找到解释.
注意,如果我使用"flavorCompile"符号,它工作正常,它只在我包含构建类型时失败.
以下是我的构建脚本的概述:
android {
compileSdkVersion 17
buildToolsVersion "20"
...
productFlavors {
qa {
applicationId "com.myapp.qa"
}
prod {
applicationId "com.myapp.prod"
}
}
sourceSets {
main {
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
manifest.srcFile 'AndroidManifest.xml'
}
qa {
res.srcDirs = ['res_qa']
}
prod {
res.srcDirs = ['res_prod']
}
}
}
...
dependencies {
compile fileTree(dir: 'libs', …Run Code Online (Sandbox Code Playgroud) 我有一个包含多个片段的ViewPager的奇怪问题.每个片段都显示一个带有多个可能答案的问题(复选框).当更改复选框状态时,它的值存储在散列映射中,这样,如果用户使用ViewPager滑出然后再返回,则可以恢复每个复选框的已选中/未选中状态.
在onCreateView()中:
ViewGroup answersRow = (ViewGroup) view.findViewById(R.id.answers_row);
//loop over each answer and add a checkbox
for(Answer answer : answers) {
View answerView = inflater.inflate(R.layout.view_answer, null);
final CheckBox answerCheckButton = (CheckBox) answerView.findViewById(R.id.answerCheckButton);
//set correct value for answer based on datamodel
String tagName = "Q" + question.getNumber() + "A" + answer.getNumber();
Integer answerValue = getDataModel().getAnswer(tagName);
boolean isChecked = (answerValue != null && answerValue > 0);
System.out.println("answer " + answerCheckButton.getTag() + " " + isChecked);
answerCheckButton.setTag(tagName);
answerCheckButton.setChecked(isChecked);
answerCheckButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用smack库(4.1.2)连接到XMPP服务器.当代码未缩小时(即使用proguard),它运行得非常好.但是在发布模式下,启用proguard后,应用程序会在连接到服务器后立即崩溃.
我试图保持所有相关的smack类不受限制,如下所示:对于Smack 4.1,推荐的ProGuard规则是什么?
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
Run Code Online (Sandbox Code Playgroud)
但对我来说这不起作用.下面是崩溃堆栈跟踪.
java.lang.ExceptionInInitializerError
at org.jivesoftware.smackx.privacy.PrivacyListManager.<init>(PrivacyListManager.java:126)
at org.jivesoftware.smackx.privacy.PrivacyListManager.getInstanceFor(PrivacyListManager.java:210)
at org.jivesoftware.smackx.privacy.PrivacyListManager$1.connectionCreated(PrivacyListManager.java:81)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(XMPPTCPConnection.java:636)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:834)
at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:365)
...
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at org.jivesoftware.smack.filter.FlexibleStanzaTypeFilter.<init>(FlexibleStanzaTypeFilter.java:40)
at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<init>(SetActiveListFilter.java:27)
at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<clinit>(SetActiveListFilter.java:25)
Run Code Online (Sandbox Code Playgroud)
有关proguard配置的任何想法会解决这个问题吗?
更新:我已经在报告中提到了另一个问题,并解释了在这种情况下提议的解决方案不是解决方案.
更新2:我重新启动了堆栈跟踪,并启用了行号.