我正在尝试使用自定义版本来重新打包我的Android应用.我想创建一个内部测试版,我可以与我的生产应用程序并排安装.
这个答案看起来正是我需要的,但它似乎不起作用.
这是我的build.xml的更新:
<target
name="-package-resources"
depends="-crunch" >
<echo>Repackaging AndroidManifest.xml to ${package.manifest.name} ${out.absolute.dir}/${resource.package.file.name}</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="--auto-add-overlay" />
<arg value="-M" />
<arg path="AndroidManifest.xml" />
<arg value="-S" />
<arg path="${resource.absolute.dir}" />
<arg value="-S" />
<arg path="${android.library.reference.1}/res" />
<arg value="-A" />
<arg path="${asset.absolute.dir}" />
<arg value="-I" />
<arg path="${project.target.android.jar}" />
<arg value="-F" />
<arg path="${out.absolute.dir}/${resource.package.file.name}" />
<arg value="--rename-manifest-package" />
<arg value="${package.manifest.name}" />
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
运行它似乎成功运行我的新代码:
ant debug -Dpackage.manifest.name=com.example.test
...
-package-resources:
[echo] Repackaging AndroidManifest.xml to com.example.test …
Run Code Online (Sandbox Code Playgroud) 似乎有一些Android设备有光学变焦,例如
有没有办法以编程方式检测这个?
由于相机通常需要几秒钟来初始化,在我的应用程序中有一些流程我启动相机预期用户即将使用它(因此应用程序感觉更快,当他们实际按下我的应用内相机按钮) .如果相机具有光学变焦,那么我不想这样做,因为镜头滑出并使用户烦恼.
如果我必须将这些设备列入黑名单,是否有人知道所有带有光学变焦的Android设备的列表,最好是使用他们的Build.MANUFACTURER和Build.PRODUCT字符串?
如果它有帮助,这里是我最近购买的S4 Zoom的Camera.Parameters:
{preferred-preview-size-for-video=704x528, factory-af-led-lv-limit=-1,-1, zoom=0, factory-af-scan-limit=-1,-1, max-num-detected-faces-hw=0, continuous-mode=off, zoom-supported=true, metering=center, whitebalance=auto, scene-mode=auto, jpeg-quality=1, factory-testno=0, factory-af-diff-check=-1,-1, preview-format-values=yuv420sp,yuv420p, best-mode=off, red-eye-fix=fail, jpeg-thumbnail-quality=100, preview-format=yuv420sp, low-light-mode=off, zoom-action=zoom-stop, face-detection=off, video-size-values=1920x1080,1280x720,800x450,768x512,640x480,320x240,176x144, factory-zoom-slope-check-data=-1,-1, preview-size=960x540, focal-length=4.300000, flash-charging=0, factory-cap-range=-1,-1, factory-iris-range=-1,-1, flash-mode-values=off,auto,red-eye,on,fillin,slow,red-eye-fix, preview-frame-rate-values=30,15, factory-af-scan-range=-1,-1, max-num-metering-areas=0, preview-frame-rate=30, focus-mode-values=auto,infinity,macro,fixed,face-detection,continuous,continuous-picture,continuous-video,manual,multi,touch,object-tracking, jpeg-thumbnail-width=224, video-size=0x0, scene-mode-values=auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight,dusk-dawn,fall-color,back-light,text, preview-fps-range-values=(7000,30000), jpeg-thumbnail-size-values=224x126,160x120,192x128,0x0, zoom-ratios=100,120,140,160,180,220,310,420,560,790,1000, preview-size-values=960x540,768x512,704x576,704x528,640x524,640x480,320x240, smart-scene-detection=0, factory-zoom-range-check-data=-1,-1, factory-af-led-range=-1,-1,-1,-1, picture-size-values=4608x2592,3264x2448,4608x3456,4608x3072,4096x2304,3960x2640,3648x2736,2592x1944,2304x1728,1984x1488,1920x1080,1024x768,960x720,640x480, preview-fps-range=7000,30000, auto-whitebalance-lock=false, min-exposure-compensation=-6, antibanding=off, max-num-focus-areas=1, vertical-view-angle=46.3, factory-wb-value=-1,-1,-1,-1, zoom-ring=-1, horizontal-view-angle=67, video-stabilization-supported=false, jpeg-thumbnail-height=126, continuous-fps=, focus-mode=auto, factory-sc-speedtime=-1,-1, factory-gyro-range-data=-1,-1,-1,-1, auto-whitebalance-lock-supported=true, video-frame-format=yuv420sp, max-num-detected-faces-sw=0, …
Run Code Online (Sandbox Code Playgroud) 有没有人设法在运行Espresso测试时通过代码禁用动画?我一直在尝试按照此网页上的说明(从此处链接):https:
//code.google.com/p/android-test-kit/wiki/DisablingAnimations
不幸的是它似乎没有工作,因为我一直看到这个权限错误:
04-27 15:48:28.694 303-342/system_process W/PackageManager? Not granting permission android.permission.SET_ANIMATION_SCALE to package com.cookbrite.dev (protectionLevel=50 flags=0x18be46)
Run Code Online (Sandbox Code Playgroud)
我真的希望避免重新配置我的设备/模拟器.我们经常在本地进行个别测试,如果我必须保持切换设置,它会让我烦恼.
我注意到其他一些开发人员抱怨说这不起作用,所以我可能并不孤单:https://groups.google.com/forum/#! msg/android-test-kit- discuss/
TCil7kMQRTM/QK1qCjzM6KQJ
android android-animation android-permissions android-espresso android-instrumentation
我一直在尝试按照获取Spoon 1.1.14的说明来截取失败的Espresso测试.
使用自定义Espresso FailureHandler配置此功能的最佳方法是什么?
有时我不小心碰到了一个组合键,让Android AVD模拟器进入全屏,我无法弄清楚如何在不重新启动模拟器的情况下摆脱它.我所能做的就是使用Alt + Tab来切换应用程序.
我正在尝试进行一些数字比较,我得到了一些奇怪的结果.
NSNumber* number1 = [NSNumber numberWithFloat:1.004];
NSNumber* number2 = [NSNumber numberWithDouble:1.004];
([number1 compare:number2] == NSOrderedSame) ? NSLog(@"YES") : NSLog(@"NO");
([number1 compare:number2] == NSOrderedAscending) ? NSLog(@"YES") : NSLog(@"NO");
([number1 doubleValue] == [number2 doubleValue]) ? NSLog(@"YES") : NSLog(@"NO");
([number1 floatValue] == [number2 floatValue]) ? NSLog(@"YES") : NSLog(@"NO");
Run Code Online (Sandbox Code Playgroud)
日志输出:
NO
YES
NO
YES
这对我来说非常令人沮丧.我知道这可能是因为浮点数与双精度数之间的差异.在我看来,它正在将双倍缩减到浮点数来进行比较.但如果我不知道如何创建数字,我该如何得到正确的结果呢?是否有不同的方法来比较NSNumber?
我继承了一些代码,使用Gson将我们的应用程序状态保存为JSON,然后使用fromJson读取它.
Gson gson = createGson();
gson.fromJson(objString, myClass);
Run Code Online (Sandbox Code Playgroud)
保存的其中一个字段是位置.不幸的是,非常偶尔解析保存的数据失败,因为我保存的Location在其mExtras中包含一个mClassLoader,而Gson库无法使用此错误创建ClassLoader:
RuntimeException:无法调用受保护的java.lang.ClassLoader()而没有args
有没有人知道为什么ClassLoader被包含在我的Location的附加内容中,以及它是否应该以JSON表示结尾?
我假设我可以通过单独保存位置对象中的关键字段(例如经度,纬度,高度,时间,精度)来解决这个问题,但如果可能的话,保存位置对象会很好.
我看到有一个我可以用来排除字段的ExclusionStrategy对象,但我不确定我是否可以/应该使用它来排除我位置内的额外内容...
仅供参考,这是我的Location对象的JSON数据(改变了经度和纬度以隐藏我):
{
<snip>
"lastKnownLocation": {
"mResults": [
0,
0
],
"mProvider": "gps",
"mExtras": {
"mParcelledData": {
"mOwnObject": 1,
"mObject": 5525040
},
"mClassLoader": {
"packages": {}
},
"mMap": {},
"mHasFds": false,
"mFdsKnown": true,
"mAllowFds": true
},
"mDistance": 0,
"mTime": 1354658984849,
"mAltitude": 5.199999809265137,
"mLongitude": -122.4376,
"mLon2": 0,
"mLon1": 0,
"mLatitude": 37.7577,
"mLat1": 0,
"mLat2": 0,
"mInitialBearing": 0,
"mHasSpeed": true,
"mHasBearing": false,
"mHasAltitude": true,
"mHasAccuracy": …
Run Code Online (Sandbox Code Playgroud) 我想用adb shell
它告诉我的设备在SD卡上显示图像.我以为这个命令会起作用:
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg
Run Code Online (Sandbox Code Playgroud)
不幸的是我收到此错误:
开始:Intent {act = android.intent.action.MAIN cmp = com.android.browser/.BrowserActivity}
错误类型3
错误:活动类{com.android.browser/com.android.browser.BrowserActivity}不存在.
我也试过做一个VIEW
动作,只尝试使用-n
或-d
参数.
adb shell am start -a android.intent.action.VIEW -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg
Run Code Online (Sandbox Code Playgroud)
仅使用-d
参数会导致此错误(我尝试使用和不使用路径上的"file://"前缀):
开始:Intent {act = android.intent.action.VIEW dat =/storage/sdcard0/Android/data // files/myfile.jpg}
错误:活动未启动,无法解析Intent {act = android.intent.action. VIEW dat =/storage/sdcard0/Android/data // files/myfile.jpg flg = 0x10000000}
该文件的权限是:
-rw-rw-r-- root sdcard_rw 198106 2013-01-02 21:29 gUD9w5.jpg
Run Code Online (Sandbox Code Playgroud)
我正在使用运行4.1.1的扎根Galaxy Nexus进行测试.
更新:我尝试了dtmilano的建议,但裁剪工具提供了"无法加载图像"弹出窗口.来自logcat的堆栈跟踪是:
ActivityManager: START {dat=file:///storage/sdcard0/Android/data/<mypackage>/Pictures/myfile.jpg typ=image/*
flg=0x13000000 cmp=com.google.android.gallery3d/com.android.gallery3d.app.CropImage …
Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用org.robolectric:robolectric:3.0
我们自己的内部Nexus存储库中的依赖项.问题是Robolectric尝试在运行时从公共存储库加载一些依赖项(如此处所述),并忽略build.gradle中的任何存储库重写.
由于我们无法从Intranet访问该公共位置,因此在尝试加载该依赖项后,我的测试会超时:
[警告]无法从存储库sonatype(https://oss.sonatype.org/content/groups/public/)获取资源'org.robolectric:android-all:jar:5.0.0_r2-robolectric-1' :传输错误file:操作超时
Robolectric配置文档的底部部分建议将其添加到Gradle配置中以覆盖URL:
android {
testOptions {
unitTests.all {
systemProperty 'robolectric.dependency.repo.url', 'https://local-mirror/repo'
systemProperty 'robolectric.dependency.repo.id', 'local'
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我已经测试了,我从未看到系统属性被设置.我已经从我的自定义Robolectric运行器(扩展RobolectricGradleTestRunner
)中打印出来,并且系统属性保持设置为null.
System.out.println("robolectric.dependency.repo.url: " + System.getProperty("robolectric.dependency.repo.url"));
Run Code Online (Sandbox Code Playgroud)
我也尝试做类似于这个评论的东西(但是这个方法不存在以覆盖RobolectricGradleTestRunner
),我也尝试直接在我的自定义Robolectric跑步者中设置系统属性,这似乎没有帮助.
@Config(constants = BuildConfig.class)
public class CustomRobolectricRunner extends RobolectricGradleTestRunner {
private static final String BUILD_OUTPUT = "build/intermediates";
public CustomRobolectricRunner(Class<?> testClass) throws InitializationError {
super(testClass);
System.setProperty("robolectric.dependency.repo.url", "https://nexus.myinternaldomain.com/content");
System.setProperty("robolectric.dependency.repo.id", "internal");
System.out.println("robolectric.dependency.repo.url: " + System.getProperty("robolectric.dependency.repo.url"));
}
Run Code Online (Sandbox Code Playgroud)
该Robolectric源代码似乎并确认这些系统属性存在.
让我把我的问题分解为最简单的例子.
创建包含一行文本的测试文件.
[root@myserver ] /tmp> echo "test ReplaceMe DoNotReplaceMe" > /tmp/daj.txt
Run Code Online (Sandbox Code Playgroud)
我们有一个现有的find
命令,我们用它来替换匹配它的所有文件中的文本(在这个例子中,我简化了这个命令只能处理一个文件,并删除了它所做的其他事情).
问题在于它取代了"ReplaceMe"它出现的任何地方,而不仅仅是它本身就是一个单词.
[root@myserver ] /tmp> find /tmp/daj.txt -exec sh -c 'f="{}"; sed -e 's/ReplaceMe/#DONE#/gi' "${f#.}" ' \;
test #DONE# DoNot#DONE#
Run Code Online (Sandbox Code Playgroud)
我写了一个新sed
命令,只在它自己是单词时替换"ReplaceMe",而不是当它是另一个单词的子串时.此命令的输出是正确的.
[root@myserver ] /tmp> cat /tmp/daj.txt | sed -e 's/\(\W\)\(ReplaceMe\)\(\W\)/\1#DONE#\3/gi'
test #DONE# DoNotReplaceMe
Run Code Online (Sandbox Code Playgroud)
当我尝试将更新的sed
命令合并到find
命令中时,它会中断.看起来我正在遇到逃避问题,但我没有设法通过添加额外的转义来解决它.
[root@myserver ] /tmp> find /tmp/daj.txt -exec sh -c 'f="{}"; sed -e 's/\(\W\)\(ReplaceMe\)\(\W\)/\1#DONE#\3/gi' "${f#.}" ' \;
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: …
Run Code Online (Sandbox Code Playgroud)