记录一些项目中碰到的小问题,小知识
1. jar 包与 aar 包
1.1 Android Studio 导出 jar 包
(1)在一个 Project 中加入 Module,即项目中新建 Module:
File → new module → Android Library(这里我命名为 mylibrary);
(2)在新建的 library 中新建要用的 java 类;
(3)在 app 中引入此 module,即在 app 的build.gradle 中加入此 module 的 dependency,如下:
dependencies{
compile 'com.android.support.appcompat-v7:21.0.3'
compile project (':mylibrary')
}
(4)项目编译之后 jar 包就生成了,可在下面的两个目录中找到:
- ./mylibrary/build/intermediates/bundles/debug/class.jar
- ./mylibrary/build/intermediates/bundles/releases/class.jar
1.2 Android Studio 导入 jar 包
复制 jar 包到 app 的 libs 目录下,接着右键 → Add as Library 即可。
1.3 Android Studio 添加 aar 包引用
(1)复制 aar 包到 app 的 libs 目录下;
(2)配置 build.gradle 文件:
a. 添加:
respositories{
flatDir{
dirs 'Libs'
}
}
b. 修改 dependencies,添加一行:
compile(name:'aar文件名称',ext:'aar')
(3)重新编译项目,编译完后在 app/build/intermediates/exploded-aar/ 可看到引用 aar 包的内容。
2. 其他杂项
2.1 在 activity 中获取另一个 xml 布局中的控件:
LayoutInflater layout = this.getLayoutInflater();
View view = layout.inflate(R.layout.布局名, null);
Button b = (Button)view.findViewById(R.id.b);
2.2 尽量减少对变量的重复计算,如:
for(int i = 0; i < list.size(); i++){ ... }
可替换为
for(int i = 0, length = list.size(); i < length; i++){ ... }
2.3 在多个 fragment 中,一些 fragment 特殊需求只支持竖屏,则可以:
在横竖屏都可用的 fragment 中的 onCreateView 中添加:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
在只支持竖屏的 fragment 中的 onCreateView 中添加:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PROTRAIT);
Acivity 的一些屏幕属性:
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE // 指定横屏
ActivityInfo.SCREEN_ORIENTATION_PROTRAIT // 竖屏
ActivityInfo.SCREEN_ORIENTATION_USER // 用户朝向
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR // 不受重力影响
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE // 横屏动态切换
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PROTRAIT // 竖屏动态切换
...
2.4 网页界面 WebView 中可返回,则可以:
// 设置返回键监听
myWebView.setOnKeyListener(backListener);
. . .
private View.OnKeyListener backListener = new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (i == KeyEvent.KEYCODE_BACK) {
if(myWebView.canGoBack()) {
myWebView.goBack();//返回上一页面
return true;
} else {
. . .
}
}
}
return false;
}
};
2.5 命令行进入线上keystore的文件所在目录,然后输入如下命令,即可查看签名:
keytool -list -v -keystore app-release.jks
其中 app-release.jks 是指你要查看签名的 keystore 文件。
3 项目中碰到的一些bug
3.1 app 安装失败
报上图中的错误是因为可能有以下几个原因:
如图中所说手机上有其他版本app
解决方法是直接点击 OK,卸载其他版本的 app用真机测试时,手机设置了禁止 USB 安装app
解决方法是手机设置允许 USB 安装appAndroidManifest 编写出错(很常见)
解决方法是检查AndroidManifest 文件,看看是不是多写或少写一些东西,比如少了诸如 “.”、“:” 等这类标点符号,或者多了其他不必要的东西其他原因(手动滑稽)
3.2 java.lang.RuntimeException: Parcel: unable to marshal value
使用 Parcel 序列化在两个 Activity 或 Fragment 中进行数据传送,Parcel 需要实现 Parcelable 接口。而如果在 Parcel 类中,若需要读或者写其他的 bean 数据的话,这些 bean 需要实现 Serializable 或 Parcelable 序列化接口。否则会出现如标题所示错误。
3.3 android studio 在电脑蓝屏后或意外重启后 报错的解决方法
问题描述:在用studio开发项目的时候电脑突然蓝屏了,重启电脑之后打开项目各种红线,原本的import全部报错。
解决方法:File -> Invalidate Cashes / Restart
参考:
在电脑蓝屏后 报错的解决方法
android studio意外重启后 原本的import全部报错
3.4 Glide 加载图片底色变绿
Glide 使用 bitmap 的编码为 RGB565,所以有时由于过度压缩导致图片变绿,因此要改变一下 Glide 的 bitmap 编码:
public class GlideConfiguration implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
接着在 AndroidManifest 中添加:
参考: Android Glide 图片加载框架图片变色变绿解决方法
持续更新中...