有时IDE会因缓存而产生一些错误.在Eclipse中,我们可以使用clean来解决问题.但是我怎么能在IntelliJ中做到这一点?
我们发现在某些标准Java库中发生的特定设备崩溃.此崩溃仅发生在一个特定型号的设备上.我相信各种Android设备还有其他奇怪的怪异.
某些地方是否有针对Android设备的已知问题的汇编?我特别想到提供的库和JVM类型的东西.
我们的Android应用程序需要自动化测试,我们的团队正在使用Robotium为我们处理这个问题.这对于单元测试来说没有问题,但我们也在编写一组端到端集成测试,不仅可以通过后端服务器来运行客户端.我有一些测试可以做到这一点,但是如果可能的话,我想将它们与单元测试分开,以便我们的持续集成构建不需要运行实时服务器才能完成.
我们正在使用闪亮的新Gradle构建系统.我想知道我是否可以做类似测试的风格或依赖于父APK的子项目来实现它.我尝试用一个单独的项目完成这项工作,使用Robotium指令来测试无源调试APK,但它没有用.也许是因为我在真正的硬件而不是模拟器.即使安装了硬件加速,我的模拟器也运气不佳.
任何建议,或者我应该只是屏住呼吸并使用我的构建需要集成服务器在构建发生时可用?
我希望versionName
从我的Android版本中包含输出APK文件的名称.
还有一个适用于0.14.x之前的插件版本的答案,但他们改变了一些数据模型,因此不再起作用,我无法弄清楚如何修复它.据我所知,下面的代码块应该可以工作,但最后一次set()
调用似乎没有效果.它不会抛出错误,但也不会替换该值.
buildTypes {
applicationVariants.all { variant ->
def oldFile = variant.outputs.outputFile.get(0)
def newFile = new File(
oldFile.parent,
oldFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
variant.outputs.outputFile.set(0, newFile)
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
我最近将Jenkins机器上的Android SDK从rev13更新到rev15,并且必须重做我们的一些自定义构建内容build.xml
以适应rev14中的更改.我在我的工作站上完成了这项工作,并检查了它,期待一切都是好的.相反,构建失败并出现以下错误:
-obfuscate:
-dex:
[dex] Converting compiled files and external libraries into /export/home/hudson/jobs/path/to/the/file/classes.dex...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.util.zip.ZipException: error in opening zip file
[dx] at java.util.zip.ZipFile.open(Native Method)
[dx] at java.util.zip.ZipFile.<init>(ZipFile.java:127)
[dx] at java.util.zip.ZipFile.<init>(ZipFile.java:143)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:206)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
[dx] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
[dx] at com.android.dx.command.dexer.Main.processOne(Main.java:418)
[dx] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:206)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:174)
[dx] at com.android.dx.command.Main.main(Main.java:95)
[dx] 1 error; aborting
BUILD FAILED
/opt/android-sdk-linux/tools/ant/build.xml:729: The following error occurred while executing this line:
/opt/android-sdk-linux/tools/ant/build.xml:731: The following error …
Run Code Online (Sandbox Code Playgroud) 我最近发现了Error Prone ,并使用其页面上链接的Gradle 插件将其集成到我的 Android 构建中。
由于我们的项目使用 Icepick(以及其他一些生成注释处理器的代码),因此我们生成了源代码,并对其进行编译。不幸的是,某些生成的代码会触发 Error Prone 中的警告,我想过滤掉该噪音不知何故。
生成的代码显示在app/build/generated/source/apt/debug
目录中。我怎样才能使这段代码免遭Error Prone 严厉的目光呢?
我正在使用Gradle插件构建我的Android应用程序.我正在使用flavors功能创建四种不同的变体.目前,它是具有四个值的单个维度,但将其设置为具有两个值的两个维度更合乎逻辑.我有那栋楼,但这是我遇到麻烦的地方.
我需要四种变体中的每一种都有不同的包名.前三个很容易,因为我有一个默认值,每个维度都可以覆盖包,但我需要设置一个包名称,当两个非默认维度都在播放时.
flavorDimensions "foo", "bar"
productFlavors {
boring.flavorDimension "foo"
charm {
flavorDimension "foo"
packageName "com.example.charm"
}
strange {
flavorDimension "bar"
packageName "com.example.strange"
}
// This is the idea of what I want, but it doesn't work because there
// must be only a single dimension specified here.
charmStrange {
flavorDimension "foo", "bar"
packageName "com.example.charminglystrange"
}
}
Run Code Online (Sandbox Code Playgroud)
通过查找组合的风味变体,我尝试在声明后设置它,但我没有太多运气.我对Gradle不是很熟悉,所以我确信我没有雇用过诡计.或者,也许我可以指定包名称src/charmStrange/AndroidManifest.xml
并让合并排序?这似乎可能会在将来引发问题.
我试图从我们的持续集成Jenkins构建到我们的Android项目的Sonar中获得JUnit测试报告.我是成功的头发,我无法弄清楚最后一步.
构建是使用Ant完成的.
我正在使用Jenkins启动的模拟器并使用缺少的android XML JUnit测试运行器运行测试.测试运行,我使用测试运行com.my.package.thing-TEST.xml
的作者提供的指令成功地将JUnit XML结果文件(等等)从设备中拉到指定的目录中.
Sonar分析使用The Jenkins Sonar插件提供的"Invoke Standalone Sonar Analysis"构建步骤完成.我已经设置了项目属性,以便所有静态源分析等都成功地被推送到Sonar服务器.
我的问题是它不会推动JUnit测试结果以及所有其他分析.我遵循了Sonar关于重复使用测试报告的说明.值得注意的是,我已经设置了这些属性:
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=android/REDACTED-test/junit-results
Run Code Online (Sandbox Code Playgroud)
我可以在构建输出中看到它应该解析结果:
17:52:28.013 INFO org.sonar.INFO - Execute Findbugs 2.0.0 done: 25446 ms
17:52:28.378 INFO p.PhasesTimeProfiler - Sensor FindbugsSensor done: 25812 ms
17:52:28.378 INFO p.PhasesTimeProfiler - Sensor SurefireSensor...
17:52:28.379 INFO s.p.s.SurefireSensor - parsing /jenkins/jobs/REDACTED/workspace/android/REDACTED-test/junit-results
17:52:28.383 INFO p.PhasesTimeProfiler - Sensor SurefireSensor done: 5 ms
17:52:28.383 INFO p.PhasesTimeProfiler - Sensor CpdSensor...
17:52:28.384 INFO o.s.p.cpd.CpdSensor - …
Run Code Online (Sandbox Code Playgroud) 我有一个API请求,其中POST
正文是以纯文本形式传输的十六进制编码的二进制数据.由于我无法辨别的原因,Retrofit2在将十六进制编码的字符串添加到请求之前添加引号,这会导致服务器阻塞它并抱怨格式错误的请求.
我们正在将我们的应用程序从原始的Retrofit转换为Retrofit2,并且根本没有任何有效负载生成代码发生了变化.
我已经能够通过Interceptor
在运行时使用一个从请求体中删除封闭引号来解决这个问题,但这似乎是一个非常愚蠢的必须跳过的箍,我更不希望引号出现在第一名.
我的界面如下所示:
public interface SampleApi {
@POST("sample-endpoint")
Call<ApiResponse> postThing(@Body String hexEncodedData,
@Header(HttpHeaders.DATE) String gmtDateStr,
@Header("X-CUSTOM-ONE") long custom1,
@Header("X-CUSTOM-TWO") String custom2);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将Content-Type
标题设置为各种值,没有明显的效果.我还没有构建自定义类型转换器,因为必须为普通的旧字符串制作其中一个转换器似乎不应该是必需的.
有人能告诉我我做错了什么吗?