Android 爬坑之路
java.lang.ClassCastException: android.app.Application cannot be cast to com.example.lbsdemo.TrackApplication:
原因:
添加了新application类,没有在AndroidManifest.xml中添加该类的声明,所以编译器抛出异常
解决:
在AndroidManifest.xml中添加:
<application
android:name=".application类名"
安装失败,存在同名的数据库:
原因:
provider的authoritie属性和其他项目同名
解决:换一个名
java.io.IOException: open failed: EACCES (Permission denied)
解决:需要动态申请权限
Error:(1, 0) Plugin with id 'com.android.application' not found.
原因:所用gradle版本太低(maybe)
解决:使用较新的gradle版本:build gradle中加入
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.+'
}
}
项目上的问题,需要从服务器下载文件,别人的手机可以,我的OPPO R9就不行,排查之后找到问题:文件URL含有中文
解决:将URL encode
/**
* 将url进行encode,解决部分手机无法下载含有中文url的文件的问题
*
* @param url
* @return
* @author xch
*/
private String toUtf8String(String url) {
StringBuffer sb = new StringBuffer();
for (int i = ; i < url.length(); i++) {
char c = url.charAt(i);
if (c >= && c <= ) {
sb.append(c);
} else {
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[];
}
for (int j = ; j < b.length; j++) {
int k = b[j];
if (k < )
k += ;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
java.lang.ClassCastException: com.entity.Device cannot be cast to java.io.Serializable
原因:实体类没有序列化
解决:将实体类继承Serializable接口
public class Device implements Serializable{
private static final long serialVersionUID = 1L;
}
Android Error receiving broadcast Intent { act=com.example.servicecallback.content flg=0x10 (has extras)}
原因:多个地方发送相同的广播,但是有的带参有的不带参,也就是extra不一致。
解决:相同的事件统一extra,然后一起sendBroadCast时要么都带参要么都不带参
/**
* 发送广播,用于改变UI界面
* @param phone
* @param state
* @param callTime
*/
private void sendBroadcastForUi(String phone, String state, String callTime) {
Intent intent = new Intent();
intent.setAction("com.example.servicecallback.content");
intent.putExtra("phone", phone);
intent.putExtra("state", state);
intent.putExtra("callTime", callTime);
sendBroadcast(intent);
}
ContextCompat不包含checkSelfPermission方法:
原因:android-support-v4.jar版本过低
Error when loading the SDK:
解决方法:
用F:\android-sdk-windows\android-sdk-windows\tools\lib下的devices.xml文件替换掉
F:\android-sdk-windows\android-sdk-windows\system-images\android-25\android-wear\x86下的devices.xml
Unable to resolve target 'android-XX
原因:android环境跟此处不对应
解决办法:打开project.properties修改target=android-XX,XX是配置的android版本
svn提交 has encountered a problem
解决方法:右键项目---> Team---> Refresh/Cleanup
Gradle sync failed: Unsupported method: BaseConfig.getApplicationIdSuffix().
The version of Gradle you connect to does not support that method.
原因:目测应该是gradle版本太低了
解决:
1.修改build.gradle文件:
dependencies {
classpath 'com.android.tools.build:gradle:1.2.1'
}
改为(从能成功运行的项目里复制一下):
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
2.然后修改gradle-wrapper.properties文件:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
3.try again即可
Gradle sync failed: The "android" command is no longer included in the SDK. Any references to it (e.g. by third-party plugins) should be removed.
Consult IDE log for more details (Help | Show Log) (1s 26ms)
解决:
remove掉build.gradle里的:
apply plugin: 'android-sdk-manager'
NavigationView中的headerLayout重复显示,如图(由于需要获取里面的控件,我动态获取了headerLayout,当再次刷新该界面时会出现重复):
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/nav_menu" />
NavigationView navView = (NavigationView) findViewById(R.id.nav_view);
View headerView = navView.inflateHeaderView(R.layout.nav_header);
Button btn_setting = (Button) headerView.findViewById(R.id.btn_setting);
login_register = (TextView) headerView.findViewById(R.id.login_regist);
user_nickname = (TextView) headerView.findViewById(R.id.user_nickname);
icon_image = (CircleImageView) headerView.findViewById(R.id.icon_image);
解决方法:
在布局中加入headerLayout: app:headerLayout="@layout/nav_header"
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header"
app:menu="@menu/nav_menu" />
代码中用getHeaderView方法获取头部布局:navView.getHeaderView(0);
// View headerView = navView.inflateHeaderView(R.layout.nav_header);
View headerView =navView.getHeaderView(0);//利用此方法获取头部视图,避免重复显示
Button btn_setting = (Button) headerView.findViewById(R.id.btn_setting);
login_register = (TextView) headerView.findViewById(R.id.login_regist);
user_nickname = (TextView) headerView.findViewById(R.id.user_nickname);
icon_image = (CircleImageView) headerView.findViewById(R.id.icon_image);
再次刷新,如图,已解决:
ExpandableListView滑动时上下两边背景会变黑
解决:加入android:cacheColorHint="#00000000"
<ExpandableListView
android:id="@+id/listview_file"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:childDivider="@color/dark_gray_bg"
android:divider="@color/dark_gray_bg"
android:dividerHeight="1dp"
android:cacheColorHint="#00000000" />
java.lang.NoSuchMethodError: android.os.PowerManager.isIgnoringBatteryOptimizations
原因:系统API太低
解决:查询要求的最低API是多少,做判断。如
if(Build.VERSION.SDK_INT >= 20.) { } else { }
No implementation found for int com.baidu.platform.comjni.engine.JNIEngine.initClass(java.lang.Object, int)
原因:so文件放在app-libs底下,没有在build.gradle中指定路径
解决:1.在build.gradle中指定路径
android{}里添加:
sourceSets{
main{
jniLibs.srcDir 'libs'
}
}
2. so文件放在src-main-jniLibs文件夹下,会自动加载
Android点击事件,第一次点击无效,第二次才响应
原因:第一次点击之获取焦点,没有响应click事件
解决:
android:focusable="true"
android:focusableInTouchMode="false"
focusableInTouchMode:是否通过touch来获取聚焦,为false则直接响应click
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/***/lib/arm/libiconv.so" is 64-bit instead of 32-bit
原因:找不到64位的so文件,32位的又不能代替
解决:暂时可以更换so文件 scrollview+TextView TextView无法更新内容
原因:布局问题
解决:两个的layout_height都设置为充满:match_parent
ImageView设置src或background在Android低版本中报错:Error inflating class ImageView
原因:可能是oom,图片优化不好导致
解决:将图片从drawable换到mipmap中,Google推荐使用mipmap是有道理的,对图片进行了优化处理
原生模拟器使用adb shell显示“$”,输入su命令切换为超级用户时提示 not found
解决:换一个更低版本的模拟器,我用的是8.0出现上述问题,换为6.0后正常
svn so文件无法提交
解决:https://blog.csdn.net/archer_zoro/article/details/63366977
AS新建项目提示 error: resource style/Platform.Widget.AppCompat.Spinner not found
解决:报错时compileSdkVersion、targetSdkVersion和support包都是27的,降低版本就不会报错,如图我换为26
模拟器安装apk时 INSTALL_FAILED_NO_MATCHING_ABIS
原因:当前APK编译运行的CPU类型与X86不符合,默认编译为ARM(真机的CPU类型),但是虚拟机默认是使用X86
解决:在 app moudle 的 build.gradle 文件中, android {}添加:
// 解决 native libraries 不支持cpu的体系结构。同时编译X86及ARM类型,允许模拟器调试
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a','x86_64'
universalApk true
}
}
注:在打包发布时需注释以上代码,并且 rebuild
使用DrawerLayout实现侧滑栏功能时,点击侧滑栏空白处时,主界面会获得事件。
解决方法:侧滑栏布局添加
android:clickable="true"
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip.....],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libiconv.so"
原因:导入so文件没有编译到apk里面去,所以导致UnsatisfiedLinkError异常
解决:so文件放到libs下 需要在build.gradle,android标签下加入如下代码:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
这样编译时会自动到libs下寻找so文件
错误: 程序包org.apache.http不存在
解决:build.gradle中android下加入
useLibrary 'org.apache.http.legacy'
java.lang.RuntimeException: Unable to instantiate application xxx.PaiDanApplication:
java.lang.ClassNotFoundException: Didn't find class "xxx.PaiDanApplication" on path:
DexPathList[[zip file "/data/app/xx.paidan-1/base.apk"],nativeLibraryDirectories=[/data/app/xx.paidan-1/lib/arm, /vendor/lib, /system/lib]]
原因:运行时无法实例化
解决:关闭AndroidStudio的Install Run
File>settings>Build,Execution,Deployment>Instnt Run>Enable Instant Run to hot swap code..取消勾选
加入一个多图选择库依赖
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
Sync后出现如下错误
Failed to resolve: com.github.LuckSiege
解决:project的build.gradle下repositories加入:
maven {
url "https://jitpack.io"
}
也就是:
allprojects {
repositories {
google()
jcenter()
maven {
url "https://jitpack.io"
}
}
}
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
原因:ndk中没有这个东西(as中通过SDK manage下载的ndk,但是不完整)
解决:https://developer.android.google.cn/ndk/downloads/,这里下载ndk,缺什么copy到你ndk的toolchains下
GitHub提交报错:
remote: Permission to ~ denied to user_.
fatal: unable to access '...': The requested URL returned error: 403
原因:由于电脑使用git bash配过SSH,系统已经将指向github.com的用户设置为了之前的用户,每次push操作的时候,默认读取保存在本地的用户。所以push到一个新账号的项目时报错。
解决:删除本地保存的GitHub账号凭据,控制面板-->用户账号-->凭据管理器,删除即可
android打包release时发生错误:
Lint found fatal errors while assembling a release target.
To proceed, either fix the issues identified by lint, or modify your build script as follows:
...
android {
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
...
解决:按它说的,build.gradle android标签下加入
lintOptions {
checkReleaseBuilds false
abortOnError false
}
ERROR: No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
原因:新版本的NDK与3.0及以前旧版的Android Gradle plugin插件不兼容
解决:将gradle版本改为3.1及以上,build.gradle下修改:
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1' // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Error: null, Cannot fit requested classes in a single dex file (# methods: 72024 > 65536)
原因:当Android App中的方法数超过65535时,如果往下兼容到低版本设备时,就会报编译错误(Android系统定义总方法数是一个short int,short int 最大值为65536)
解决方法:
在Android的模块gradle文件的defaultConfig默认配置里面增加:
multiDexEnabled true
git clone 到非空目录提示:
fatal: destination path 'OrderFoodAPP' already exists and is not an empty directory.
解决:
1. 进入非空目录,假设是 F:/VSProjects/OrderFoodAPP/
2. git clone --no-checkout https://git.oschina.net/NextApp/platform.git tmp
3. mv tmp/.git . //将 tmp 目录下的 .git 目录移到当前目录
4. rmdir tmp
5. git reset --hard HEAD
ListView的item点击事件和内部控件点击事件冲突
解决:item的xml文件根节点加入:android:descendantFocusability="blocksDescendants",内部控件加入:android:focusable="false"
svn: E230001: Server SSL certificate verification failed: certificate issued
原因:证书问题
解决:忽略证书,Android Studio Terminal中输入如下命令
svn ls svn地址,然后输入p即可
ERROR: The specified Gradle distribution 'https://services.gradle.org/distributions/gradle-4.6-all.zip
解决:将gradle-->wrapper文件夹下的gradle-wrapper.properties里面的 distributionUrl 修改为你其他项目能运行的版本。
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedV...
解决:编译版本和build下的版本号要一致,比如我用的27
compileSdkVersion
defaultConfig {
targetSdkVersion
} implementation 'com.android.support:appcompat-v7:27.1.1'
Android 爬坑之路的更多相关文章
- Android爬坑之路
做了那么久前端,现在终于可以回到我的老本行, 今天我用了一天的时间配置里Android开发环境,mac和windows双平台,eclipse和IDEA双平台,别问为什么,我就喜欢,中间大坑不断,再加上 ...
- Tinker爬坑之路
目的 热修复去年年底出的时候,变成了今年最火的技术之一.依旧记得去年面试的时候统一的MVP,然而今年却变成了RN,热修复.这不得不导致我们需要随时掌握最新的技术.不然可能随时会被淘汰.记得刚进公司,技 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- Vue 爬坑之路(九)—— 用正确的姿势封装组件
迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...
- Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目
vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli vue ...
- Vue 爬坑之路(十二)—— vue-cli 3.x 搭建项目
Vue Cli 3 官方文档:https://cli.vuejs.org/zh/guide/ 一.安装 @vue/cli 更新到 3.x 之后,vue-cli 的包名从 vue-cli 改成了 @vu ...
- 安卓易学,爬坑不易—腾讯老司机的RecyclerView局部刷新爬坑之路
前言 安卓开发者都知道,RecyclerView比ListView要灵活的多,但不可否认的里面的坑也同样埋了不少人.下面让我们看看腾讯开发工程师用实例讲解自己踩坑时的解决方案和心路历程. 话说有图有真 ...
- Tinker + Bugly + Jenkins 爬坑之路
前阵子 Android 端的线上崩溃比较多,热修复被提上日程.实现方案是 Tinker,Jenkins 打包,最后补丁包上传到 Bugly 进行分发.主要在 Jenkins 打包这一块爬了不少坑,现记 ...
随机推荐
- 信号基础知识--FFT DFT
clc;close all;clear all; f0=10; fs=100; %采样率 t=1/fs:1/fs:2; %共两秒钟,共200个采样点.采样间隔T=1/100 y ...
- 4412 uboot上手
1,了解 print 查看UBOOT软件的环境变量 (变量名=变量) setenv.saveenv setenv abc 100 200 设置 添加一个变量值 修改一个已有的变量 ...
- PHP pthread 多线程 案例
<?php /** *检测http服务是否可以正常访问 *启动三个线程执行任务 */ class taskWork extends Thread { public $url = ''; //检测 ...
- 如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课
如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课 本文作者:谢幺 2017-03-10 10:09 专题:硬创公开课 导语:十年安全产品经验的百度安全专家兜哥,手把手教你用开源项目搭建SIEM安 ...
- Python中单引号,双引号,3个单引号及3个双引号的区别
单引号和双引号在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如 str1 = 'python' str2 = "python" str1和str2是没有任何区 ...
- boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...
- 日常LINUX操作一
1.use root accounthttp://blog.csdn.net/sunxiaoju/article/details/51993091http://blog.csdn.net/gongch ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...
- tomcat 配置 使用 HTTPS
1.生成证书 keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "d:\temp ...
- codeforces 508B
B. New Year Permutation time limit per test 2 seconds memory limit per test 256 megabytes input stan ...