记录一些琐碎的安卓知识

记录一些项目中碰到的小问题,小知识

图片来源于网络

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 安装失败

报上图中的错误是因为可能有以下几个原因:

  • 如图中所说手机上有其他版本app
     解决方法是直接点击 OK,卸载其他版本的 app

  • 用真机测试时,手机设置了禁止 USB 安装app
     解决方法是手机设置允许 USB 安装app

  • AndroidManifest 编写出错(很常见)
     解决方法是检查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 中添加:

  <!-- 防止 Glide 加载图片底色变绿 -->
 <meta-data
     android:name="com.xxx.xxx.GlideConfiguration"
     android:value="GlideModule"/>

参考: Android Glide 图片加载框架图片变色变绿解决方法


持续更新中...

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 127,724评论 18 546
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 9,480评论 2 42
  • 今天我像所有电视剧里面的职场小白一样,因为工作的原因哭的稀里哗啦。我一直坚信要与人为善,当我被别人恶意相待时我就觉...
    我是你的大大大阅读 19评论 0 0
  • 很多時候 任性自我 很多時候 在執拗中撕扯 有人說 偏執是一種錯 會讓人想逃離想躲 有人說 去我執 才會...
    紫色茜茜阅读 43评论 0 0
  • 急了 心口堵住了一般,好难受。 今天老邻居来我家找我妈聊天。 说着我的青梅,现在生活的极其美好。有一双大小儿子,漂...
    JK_Joe阅读 24评论 0 0