小编Dan*_*n J的帖子

在自定义Ant构建步骤中更改应用程序包名称

我正在尝试使用自定义版本来重新打包我的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 apk aapt

11
推荐指数
1
解决办法
7352
查看次数

有没有一种程序化的方法来检测相机是否有光学变焦?

似乎有一些Android设备有光学变焦,例如

  • 三星S4 Zoom(OS 4.2)
  • Altek A14和A16(OS 2.3.5)

有没有办法以编程方式检测这个?

由于相机通常需要几秒钟来初始化,在我的应用程序中有一些流程我启动相机预期用户即将使用它(因此应用程序感觉更快,当他们实际按下我的应用内相机按钮) .如果相机具有光学变焦,那么我不想这样做,因为镜头滑出并使用户烦恼.

如果我必须将这些设备列入黑名单,是否有人知道所有带有光学变焦的Android设备的列表,最好是使用他们的Build.MANUFACTURERBuild.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)

android android-camera

11
推荐指数
1
解决办法
2411
查看次数

如何在运行Espresso测试时禁用代码中的动画

有没有人设法在运行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

11
推荐指数
3
解决办法
1万
查看次数


如何在Android模拟器中退出全屏模式

有时我不小心碰到了一个组合键,让Android AVD模拟器进入全屏,我无法弄清楚如何在不重新启动模拟器的情况下摆脱它.我所能做的就是使用Alt + Tab来切换应用程序.

android android-emulator

9
推荐指数
1
解决办法
2万
查看次数

NSNumber比较:返回不同的结果

我正在尝试进行一些数字比较,我得到了一些奇怪的结果.

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?

iphone objective-c nsnumber

7
推荐指数
1
解决办法
5080
查看次数

解析JSON的Gson中的RuntimeException:无法调用受保护的java.lang.ClassLoader()而没有args

我继承了一些代码,使用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)

android location gson

7
推荐指数
1
解决办法
1万
查看次数

如何使用adb shell显示本地图像

我想用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)

android adb

7
推荐指数
1
解决办法
1万
查看次数

如何覆盖Robolectric运行时依赖性存储库URL?

我们正在尝试使用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源代码似乎并确认这些系统属性存在.

android robolectric android-gradle-plugin

7
推荐指数
2
解决办法
1812
查看次数

如何转义传递给在Linux上使用exec选项查找的命令

让我把我的问题分解为最简单的例子.

创建包含一行文本的测试文件.

[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)

linux escaping sed exec find

6
推荐指数
1
解决办法
3730
查看次数