Eclipse 转Android 的一些坑, 结合各类文章的归纳与总结.
从eclipse转到android studio难免会遇到一些坑爹的地方, 记录一下这几点:
1, 图片 .9.png 图片的报错;
2, 部分文件的编码表不是UTF-8的问题;
3, 有依赖导包不存在和V4依赖问题;
4, Minimum supported Gradle version is 3.3. Current version is 2.14.1错误
5. build的时候, 报出 More than one file was found with OS independent path 'META-INF/DEPENDENCIES' 错误
6, Android 5.0不能隐式启动service,必须显示启动;
7, Android 8.0之后,应用不能对大部分的广播进行静态注册,只能动态注册;
这几点的修改稍微做一下总结;
1, 图片.9.png 图片的报错;
- 图片.9.png 报错一般是.9.png的图片没有画左边和上面的拉伸线,同时也可以画上右边和下面的显示区域, 有的时候就
画了拉伸线和显示线仍然报错, 可以用as打开图片后勾选中 Show patches, 然后关闭图片,就可以正常 build 了, 具体规范
可以参考链接: AS .9.png图的使用
2, 部分文件的编码表不是UTF-8的问题;
- 编码表不正确的解决方式很简单, 借助工具editPlus轻松实现所有文件批量转码, 使用editPlus需要注意的是,ediPlus转码后的每个文件都会生成一个.bak文件的临时文件, 要去掉所有的.back备份文件:
首先打开editPlus(你的可能是破解版,所以我写2钟语言) ,选择Tools(工具) —> Configure User Tools(配置自定义工具)---->File(文件)将Default encoding(默认文本编码)改为utf-8(不加Bom的)----->Create backup file when saving(在保存文件时创建备份)这个前面的√去掉---->apply(应用)在点ok,解决了编码表问题.
3, 有依赖导包不存在和V4依赖问题;
- 一般典型存在的就是v4包问题, 有时即使将eclipse的v4包拷贝到AS,仍然不能解决异常, 而使用v7包的话,需要注意版本了, 我遇到的例子,我使用了 implementation ‘com.android.support:appcompat-v7:28.0.0’ 仍然报错,部分包找不到,后来使用了 implementation ‘com.android.support:appcompat-v7:22.0.0’ ,ok问题解决, 具体是啥问题忘记了.
- 除了v4包, 还有老项目使用的网络请求问题,import org.apache.http.xxxxxx 爆红包不存在, 这是因为在android 6.0以后, Google 删除了大部分 org.apache 的大部分库, 在项目的build.gradle下加入如下图的 useLibrary ‘org.apache.http.legacy’ ,搞定这个包.
- 还有一个细节的地方, 在项目打包的时候才会提示, 一般是提示, 继续构建将会出错, 提示的内容里也写了需要添加的内容, 也是在项目的build.gradle下加入如下图的:
lintOptions { checkReleaseBuilds false abortOnError false }
4, Minimum supported Gradle version is 3.3. Current version is 2.14.1错误
- 这个错误一般发生在eclisse和as通用的项目里或者是其他as项目, 首先修改工程的build.gradlel里
6, android5.0不能隐式启动service,必须显示启动;
- 隐式启动 -----android5.0之后禁止使用
<service android:name=".service">
<intent-filer>
<action android:name="com.android.service"/>
<intent-filer>
</service>
final Intent serviceIntent=new Intent();
serviceIntent.setAction("com.android.service");
- 显示启动
final Intent serviceIntent=new Intent(this,service.class);
startService(serviceIntent);
new Intent(this,service.class)中, service.class是服务的类名.
-
还有中说法是加服务端包名,这个方式没有试过, 我是直接写成显示启动,方式如下:
Intent intent = new Intent();
intent.setAction(“com.viaembedded.veonvif.RemoteService”);//Android5.0后service不能采用隐式启动,故此处加上包名
intent.setPackage(“com.example.oscarzhou.nvrmanagerapp”);//
bindService(intent, serConn, BIND_AUTO_CREATE);
注意,是服务端包名,而不是所谓的客户端包名getPackageName().
7, Android 8.0之后,应用不能对大部分的广播进行静态注册,只能动态注册;
- 在Android 8.0的平台上, 应用不能对大部分的广播进行静态注册, 少部分, 如 Android 开机的广播通过静态注册还是能够正常接收的, 解决方式(偷下懒 ) ,: 直接看连接