Android bug解决笔记

#####剪裁

系统自带的

public void startPhotoZoom(Uri uri, Uri uritempFile) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

// 设置裁剪

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 200);

intent.putExtra("outputY", 200);

intent.putExtra("scale", true);// 去黑边

intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

intent.putExtra("noFaceDetection", true);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);

 intent.putExtra("return-data", false);

startActivityForResult(intent, UtilConstants.ZOOM_CROP_WITH_DATA);

}

是没错,小米4 就是不干

无法保存剪切过的图片。

查阅了 N 多。最后注释了一条,画线那条好了!!!

说是,原来系统默认剪切的有返回数据有个大小限制,但是小米剪切的没有大小限制,所以往往剪切大的超过大小限制了。。。

今天又遇到了个问题

vivo X5 无法更换,拍照,相册都不行?

什么鬼??以前我记得还是好好的!!!

排查了一下,剪切过的图片没有保存,为毛?

对比了一下发现,卧槽 和以前仅仅是 新的文件名(uritempFile) 用的dateFormat

原来是

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");

经实验修改后没问题的为:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");

你没看错,就是一个空格搞得鬼。。



Expected resource of type color

在真机测试正常,但是打包失败

Expected resource of type color [ResourceType] 。


RadioButton rb = new RadioButton(context);   

rb.setTextColor(context.getResources().getColorStateList(R.drawable.tab_text_checkee));

解决办法1:

在build.gradle文件中增加一下信息:

    android {lintOptions {disable "ResourceType"}}

但是,这只是禁用资源类型检测,这样在打包过程中就不会因为资源类型不匹配而提示错误了。

  根本原因是把资源类型弄错了,总的来说这是我的不规范编程导致的,上面是设置textcolor,那说明使用一个color资源,单色值的应该来源于colors.xml中定义的,但是我上面是使用的一个colorstate,是一个自定义的selector,一个xml文件,这个时候我们应该把这个文件放在res/color目录中,而不是res/drawable目录中,然后使用R.color.xxx去引用,这样就没问题了。

    res/color/:存放定义了颜色状态列表资源(ColorState List Resource)的XML文件。


强制使用相同版本的库

更新IDE -Android Studio2.3 ,Android SDK及SDK toolos

Android Support Repo 38-->47.

编译一下, what a fuck.

绚烂的红提示我出错了...

大概是这个样子:

    Manifest merger failed : Attribute meta-data# support.VERSION@value value=(25.3.0) from [com.android.support:support-v13:25.3.0]

    AndroidManifest.xml:27:9-31 is also present at [com.android.support:preference-v7:26.0.0-alpha1]   

    AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1). Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:25:5-27:34 to override.

google 一下.

地址:

http://stackoverflow.com/questions/42949974/android-support-repo-46-0-0-with-android-studio-2-3

重点是:


    What's the problem

    Some libraries depend on version "X or newer" of Android support libraries so Gradle dependency resolution grabs whatever is the newest available ignoring you actually have a precise version specified in your dependencies


    block.

    This is not what you want. You want all support libraries with same version and major version has to match compile SDK version.

    What's the solution

    Fortunately you can force a specific support library version.

    Put this at the end of your app module build.gradle:

    configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.3.0' } } }}

    Of course replace the version with whatever it is you're using.

    Version values for support libraries in dependecies

   block are now irrelevant.

重点在这里,强制使用相同版本的库:

在moudle 的build.gradle中 添加上,版本自选.

    configurations.all {

    resolutionStrategy.eachDependency { DependencyResolveDetails details ->

        def requested = details.requested

        if (requested.group == 'com.android.support') {

            if (!requested.name.startsWith("multidex")) {

                details.useVersion '25.3.0'

            }

        }

      }

    }

  Error:Execution failed for task ':leancloudchatkit:processDebugAndroidTestManifest'.

> Manifest merger failed : uses-sdk:minSdkVersion 11 cannot be smaller than version 14 declared in library [com.android.support:appcompat-v7:26.0.0-alpha1] C:\Users\Administrator.SC-201606141054\.android\build-cache\b3d308ef34ad14838b4f9d11338a057d9ccaf6f1\output\AndroidManifest.xml

Suggestion: use tools:overrideLibrary="android.support.v7.appcompat" to force usage

还好相对简单,意思是 最低 minsdk 不能小于support:appcompat-v7:26.0.0-alpha1所支持的,

果然在 其他library 中最低是11.修改之搞定.


极光推送

二次开发已有项目,之前的 很多东西都是比较老的,切换新的编译版本 23记下两个坑:

1. API23 Android 6.0 通知图标不显示

解决办法:要在res下加一个极光推送图标,文件名为jpush_notification_icon.png,图标要求跟Android6.0的通知图标一样。

2.Jpush [AndroidUtil] No target service !

一直无解,,最后替换了最新的jar包,clean-rebuild,

搞定。

Eclipse DDMS files not found: 

许久不用eclipse ,导入历史项目查看,,卧槽:

DDMS files not found: ........\platform-tools\hprof-conv.exe

木有了,想想也就更新了SDK....网上直接找,

http://download.csdn.net/detail/hu5080126/7669915

此处下载一个.

但是这又是什么鬼....

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2728246-283c5a3c1752e847.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

连这个都要实名制..

我也是醉了.

百度一下公开的 有用的拿走

http://pan.baidu.com/s/1bpoy0az



android-async-http下载失败: HttpResponseException: Content-Type (application/octet-stream)

[loopj](https://github.com/loopj)/**[android-async-http](https://github.com/loopj/android-async-http)**

项目二次开发,更新新的MP3接口,结果无法下载MP3文件,

原来代码

    AsyncHttpClient client = new AsyncHttpClient();


        // 获取二进制数据如图片和其他文件

        client.get(url, new BinaryHttpResponseHandler(allowedContentTypes) {

            int curProgress = 0;

            @Override

            public void onSuccess(int statusCode, Header[] headers,

                                  byte[] binaryData) {

                downLoadListener.OnSuccess(binaryData);

            }

            @Override

            public void onFailure(int statusCode, Header[] headers,

                                  byte[] binaryData, Throwable error) {

    //                Log.e("code", statusCode + error.toString());

                downLoadListener.onFailure();

            }

            @Override

            public void onProgress(long bytesWritten, long totalSize) {

                super.onProgress(bytesWritten, totalSize);

                int count = (int) ((bytesWritten * 1.0 / totalSize) * 100);

                if (count != curProgress) {

                    curProgress = count;

                    downLoadListener.onProgress(count);

                }

            }

            @Override

            public void onRetry(int retryNo) {

                // TODO Auto-generated method stub

                super.onRetry(retryNo);

                // 返回重试次数

            }

        });

原来指定的文件类型是


      String[] allowedContentTypes = new String[]{"audio/mpeg"};

但是新的接口打错误信息却显示

    HttpResponseException: Content-Type (application/octet-stream)  not allowed!

application/octet-stream 是什么?为什么被禁止了?

octet,一种计算机语言,意思是因特网标准使用八位组.

百度百科给的解释:http://baike.baidu.com/item/octet

把这个文件类型加进去就好了.

    String[] allowedContentTypes = new String[]{"application/octet-stream","audio/mpeg"};

    }

 Eclipse。Failed to load F:\sdk\build-tools\26.0.2\lib\dx.jar

导入down 的很古老的 项目,各种报错。


Failed to load F:\sdk\build-tools\26.0.2\lib\dx.jar

  Unknown error: Unable to build: the file dx.jar was not loaded from the SDK。

加载最新的这个 dx.jar 出问题,多方查找,有的指出是SDK版本和ADT版本不兼容引起的。

解决办法:使用兼容版本的 dx.jar ,选择build-tools 文件下 其他版本的dx.jar 复制到26.0.2 版本下边。解决问题。

Dx PARSE ERROR:

  Dx unsupported class file version 52.0 ...while parsing android/annotation/SuppressLint.class

Dx 1 error; aborting

出错原因:java 编译器 版本和android sdk版本不匹配。

      Android 4.4以上(包括Android 4.4)才可以用1.7版本的编译器

      在Android 4.4以下的只能用1.5和1.6版本的编译器,不能用1.4版本及其以下版本。

Eclipse WEB java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

........

原因:在web项目中,当Class.forName("om.mysql.jdbc.Driver");时myeclipse是不会去查找字符串,不会去查找驱动的。所以只需要把mysql-connector-java-5.1.7-bin.jar拷贝到tomcat下lib目录就可以了。

同样发生类似这样的问题 还有 使用jackson-all-2.8.0.jar 时

Eclipse 服务启动失败 端口被占用:

![image.png](http://upload-images.jianshu.io/upload_images/2728246-d71a5be59594bb7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Seceral ports (8005 8080 8009) required by Tomcat V7.0 Sever at localihost are already in use.

手动去停止服务再次重启就好了如图:

![image.png](http://upload-images.jianshu.io/upload_images/2728246-6478316ce3bcd601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Android 6.0 animation-list 失效问题


再Android4.4(API 19)可以使用,但是在Android6.0(API 23)中不可以使用。

通过AnimationDrawable的文档:

创建逐帧动画的最简单方法是在XML文件中定义动画,放置在res/drawable/文件夹中,并将其设置为View对象的背景。然后,调用start()运行动画。

所以需要调用start方法进行调用


ImageView mIvLoading = findViewById(R.id.iv_splash_loading);

((Animatable)mIvLoading.getDrawable()).start();

你可能感兴趣的:(Android bug解决笔记)