MayIHelpYou

MayIHelpYou 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

MayIHelpYou 提出了问题 · 2月17日

fragment 崩溃 连累activity吗?

fragment 崩溃 连累activity吗

关注 1 回答 0

MayIHelpYou 收藏了文章 · 2月13日

Android 开发工具推荐

简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家。: )

Library methods count

每一个 Android App 的开发中都会用到很多的库,这个工具能够让你看到不同库的大小和,帮助你回避 65K 方法数限制。

Stetho

Stetho 是 Facebook 构建的一个 Android debug 工具,能够和 Chrome 浏览器绑定,使得你可以通过 Chrome 来调试 Android 应用,比如查看网络请求情况和 SQLite 数据库。

LeakCanary

LeakCanary 是一个知名的用于分析 Android 内存泄漏的库。

APK method count

这个工具能够很清楚的展示出 Android APK 包中的方法数。

Material Design Icons

帮助你自定义自己的 Material Design 图标。

Buck

Buck 是一款 Facebook 发布的高性能构建工具。不仅能用于 Android 还支持 Go、iOS、Java、Groovy 等多种语言和平台。

ProGuard

ProGuard(或者 DexGuard)能帮助混淆你的代码,并减小应用包的体积。

Android Asset Studio

Android Asset Studio 是一个一站式的工具,能够生成应用图标、Action bar 图标、通知图标,生成 .9 图。

Device Art Generator

Device Art Generator 能方便的将应用截图嵌入到真是设备的效果图中。这样,当用户在你的网站上或其他宣传材料中看到你的应用截图时,就能更加直观地了解应用的内容环境。


欢迎关注微信号「极光开发者」

查看原文

MayIHelpYou 收藏了文章 · 2月13日

为什么 Android 开发者都应该尝试一下 Anko?

简评: 这里介绍的仅仅是 Anko 中很小的一部分,Kotlin + Anko 真的让 Android 开发简化了不少,用了 Anko 基本就可以告别那些什么 Android 不得不知的代码收集贴了。

Anko 是 JetBrains 针对 Kotlin 推出的 Android 开发库,其目的是通过 Kotlin 让 Android 开发更加简单。

Anko 主要有四个模块:

  • Commons
  • Layouts
  • SQLite
  • Coroutines

在这篇文章中,我们先主要介绍其 Commons 模块中的一些内容:

首先,View.setOnClickListener 方法可以说是广大 Android 开发者写得最多的方法之一了,如果你是用 Kotlin,那么代码看起来应该是类似这样的:

button.setOnClickListener(object : View.OnClickListener{
 override fun onClick(v: View) {
 }
})

通过使用 Anko 可以把代码缩减为:

button.onClick { }

Intent

当我们希望跳转到新的 Activity 时,代码类似这样:

val intent = Intent(this, MainActivity::class.java)
intent.putExtra("id", 5)
intent.putExtra("name", "John")
startActivity(intent)

而通过 Anko:

startActivity<mainactivity>("id" to 5, "name" to "John")

Anko 还封装了一些常用的功能,让我们无需定义 Intent:

browse("https://makery.co")
share("share", "subject")
email("hello@makery.co", "Great app idea", "potato")

尺寸的单位问题

通过 Anko,Android 中的尺寸单位换算也变得无比简单:

val dpAsPx = dip(10f)
sp(15f)

API level 的问题

碎片化是 Android 开发者必须要面对的问题,我们不希望不管那些还在用旧版本的用户,但也希望能使用新 Android 版本中酷炫的功能。最常见的做法是像这样:

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP){ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ }

现在让我们看看 Anko 是怎么做的:

doIfSdk(Build.VERSION_CODES.LOLLIPOP){ }
doFromSdk(Build.VERSION_CODES.LOLLIPOP){ }

真是简单又易懂。

处理线程

处理多线程一直都不太容易,但在 Android 开发中我们经常需要面对。在 Anko 中的做法会相当的简洁:

doAsync {
 //IO task or other computation with high cpu load
 uiThread {
   toast("async computation finished")
 }
}

集成 Anko

如果你也心动了,想尝试一下,可以通过下面的方式来集成 Anko:

ankoVersion = "0.10.1"
dependencies {
 compile "org.jetbrains.anko:anko-appcompat-v7-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-design-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-design:$ankoVersion"
 compile "org.jetbrains.anko:anko-sdk15-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-sdk15:$ankoVersion"
}
不夸张的说,Anko 可以算是我学习 Kotlin Android 开发的一个重要原因了。

原文链接:Why every Android developer should use Anko - Kotlin Development
推荐阅读:跨浏览器问题的五种解决方案

查看原文

MayIHelpYou 赞了文章 · 2月13日

怎样减少 Android 应用包 60% 的大小?

简评: 应用的大小也是用户体验的一个重要方面,而减少 Android 应用安装包大小其实一点也不复杂。

对于移动应用来说,应用安装包的大小当然是越小越好。特别是对于一些欠发达地区,你不希望用户因为手机「存储空间不足」而卸载你的应用。

本文就介绍了几个小技巧来有效减少 apk 的大小:

首先,我们先用 Android Studio 提供的 APK Analyser 工具来分析下我们的 apk 文件:

apk

可以看到占空间最多的主要是三个部分:classes.dex, res 和 resources.arsc。

  • classes.dex:包含有 Java 代码的字节码文件。
  • res:包含了资源文件,比如图片、布局文件等等。
  • resources.arsc:包含所有的值资源文件,如 strings, dimensions, styles, integers 等等。

classes.dex

classes.dex 文件的大小完全取决于程序中方法数的多少。在上面展示的例子中,包含了 4392 个类和 29897 个方法。这个结果是默认没有使用 proguard 的。我们有两个默认的 proguard 文件可以使用:

从名字上就可以看出,proguard-android-optimize.txt 是更加激进的 proguard 配置,包括和 proguard-android.txt 相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。

可以像这样来使用:

release {
    //Enable the proguard
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), "proguard-rules.pro"

    //Other parameters
    debuggable false
    jniDebuggable false
    renderscriptDebuggable false
    signingConfig playStoreConfig //Add your own signing config
    pseudoLocalesEnabled false
    zipAlignEnabled true
}

通过设置 minifyEnabled 属性为 true,会告诉 proguard 删除所有未使用的方法和指令,进一步的减少 .dex 文件的大小。

.dex
方法数从 29897 减少到了 15168,大小从 3.1MB 减少到了 1.98 MB。

res

对于 res 文件夹,通常占空间最大的就是图片了。如果你的 Android Studio 为 2.3,并且项目的 minimum version 为 18 或以上,应该使用 webp 而不是 png 图片。webp 图片有更小的体积,图片质量还没有什么损失。

我们可以选中 drawable 和 mipmap 文件夹,右键后选择 convert to webp,将图片转为 webp 格式。

webp

转换的结果:

res

我们还可以在 build.gradle 中设置 shrinkResources 属性为 true,这会在打包时删除未使用的资源:

release{
  //...
  //...
  shrinkResources true
  //...
}

另外如果你的应用不需要支持国际化,那么可以设置 resConfigs 为 "zh","en",即只支持中英文:

defaultConfig {
    //...
    //...
    //...

    resConfigs "zh","en"
}

这么做是因为对于官方的 support library,默认是支持国际化的,也就是包含了很多不同语言的资源文件,我们就可以通过这样设置来移除用不到的语言资源文件。

通过上面的设置,这个 App 的安装包大小从 3.19MB 减少到了 1.89MB。当然还有很多其他的减少 apk 大小的技巧,但这里介绍的技巧是完全可以作为你项目的默认设置。


原文链接:How you can decrease application size by 60% (In only 5 minutes)?
推荐阅读:Android Package Name vs. Application ID

欢迎关注微信号「极光开发者」

查看原文

赞 15 收藏 9 评论 0

MayIHelpYou 赞了文章 · 2月13日

为什么 Android 开发者都应该尝试一下 Anko?

简评: 这里介绍的仅仅是 Anko 中很小的一部分,Kotlin + Anko 真的让 Android 开发简化了不少,用了 Anko 基本就可以告别那些什么 Android 不得不知的代码收集贴了。

Anko 是 JetBrains 针对 Kotlin 推出的 Android 开发库,其目的是通过 Kotlin 让 Android 开发更加简单。

Anko 主要有四个模块:

  • Commons
  • Layouts
  • SQLite
  • Coroutines

在这篇文章中,我们先主要介绍其 Commons 模块中的一些内容:

首先,View.setOnClickListener 方法可以说是广大 Android 开发者写得最多的方法之一了,如果你是用 Kotlin,那么代码看起来应该是类似这样的:

button.setOnClickListener(object : View.OnClickListener{
 override fun onClick(v: View) {
 }
})

通过使用 Anko 可以把代码缩减为:

button.onClick { }

Intent

当我们希望跳转到新的 Activity 时,代码类似这样:

val intent = Intent(this, MainActivity::class.java)
intent.putExtra("id", 5)
intent.putExtra("name", "John")
startActivity(intent)

而通过 Anko:

startActivity<mainactivity>("id" to 5, "name" to "John")

Anko 还封装了一些常用的功能,让我们无需定义 Intent:

browse("https://makery.co")
share("share", "subject")
email("hello@makery.co", "Great app idea", "potato")

尺寸的单位问题

通过 Anko,Android 中的尺寸单位换算也变得无比简单:

val dpAsPx = dip(10f)
sp(15f)

API level 的问题

碎片化是 Android 开发者必须要面对的问题,我们不希望不管那些还在用旧版本的用户,但也希望能使用新 Android 版本中酷炫的功能。最常见的做法是像这样:

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP){ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ }

现在让我们看看 Anko 是怎么做的:

doIfSdk(Build.VERSION_CODES.LOLLIPOP){ }
doFromSdk(Build.VERSION_CODES.LOLLIPOP){ }

真是简单又易懂。

处理线程

处理多线程一直都不太容易,但在 Android 开发中我们经常需要面对。在 Anko 中的做法会相当的简洁:

doAsync {
 //IO task or other computation with high cpu load
 uiThread {
   toast("async computation finished")
 }
}

集成 Anko

如果你也心动了,想尝试一下,可以通过下面的方式来集成 Anko:

ankoVersion = "0.10.1"
dependencies {
 compile "org.jetbrains.anko:anko-appcompat-v7-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-design-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-design:$ankoVersion"
 compile "org.jetbrains.anko:anko-sdk15-listeners:$ankoVersion"
 compile "org.jetbrains.anko:anko-sdk15:$ankoVersion"
}
不夸张的说,Anko 可以算是我学习 Kotlin Android 开发的一个重要原因了。

原文链接:Why every Android developer should use Anko - Kotlin Development
推荐阅读:跨浏览器问题的五种解决方案

查看原文

赞 1 收藏 1 评论 0

MayIHelpYou 赞了问题 · 2月12日

如何让 Android webview 渲染自己编译的 Chromium webview?

我在做一个关于 webrtc 的项目,视频采用的是 h264 格式。 我打算用 webview 来加载视频页面, 我查了查 webview 内核用的是 Chromium,但是默认是支持 h264 这种格式

我的想法是自己编译一个 Chromium webview,修改一下参数 让其支持 h264, 参考下面文章 https://www.chromium.org/deve...

目前遇到的困惑是,文章里面说安装需要 root 卸载手机的 webview,这对于用户来说 显然不可接受,可不可以安装一个和系统不冲突的,并且让安卓 webview 指定渲染这个自己编译的 webview ? 我 google 了很长时间没找到思路, 想请有这方面经验的朋友 给点方法和思路 谢谢!

关注 3 回答 0

MayIHelpYou 提出了问题 · 2月6日

删除了app后,每次debug安装时会自动生成多一个快捷方式

平时调试一个app,是机器自动删除旧的重新安装新的app。

但我自己手动删除了调试时机器安装在手机上app, 然后我又点debug,机器会安装app时自动生成多一个快捷方式入口,

就这样,每当手动删除后,都会多生成一个快捷入口,为什么呢?

关注 1 回答 0

MayIHelpYou 提出了问题 · 2月6日

关于按下home键后再返回app的生命周期

关于activity按下home键后 再返回app的生命周期

我在网上查到的资料都是这样

onPause->onStop->onRestart->onStart->onResume

但是,我自己测试出来是这样, 为什么?

`I/System.out: onDestory
I/System.out: onCreate
I/System.out: onDestory
I/System.out: onCreate
I/System.out: onDestory
I/System.out: onCreate`

按下home, 再返回, 再按home, 再返回, 连续几次都是这样。

关注 1 回答 0

MayIHelpYou 赞了回答 · 1月31日

解决NestedScrollView 滚动到边缘的余光的颜色不能改变?

关注 2 回答 1

MayIHelpYou 提出了问题 · 1月22日

解决NestedScrollView 滚动到边缘的余光的颜色不能改变?

比如,

NestedScrollView 套了一篇很长的文章, 用手从上往下拨, 直到下面尽头时,会出现点蓝色的余光, 这个余光怎么改变它的颜色呢 ?

谢谢。

关注 2 回答 1

认证与成就

  • 获得 0 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 1月4日
个人主页被 433 人浏览