Cafeting

一个人的行走范围,就是他的世界。

最近使用 ThinkPHP3.2.3 进行 API 开发,发现 ThinkPHP3.x 查询数据库返回所有字段值类型都是 String。以前开发 web 的时候没怎么注意这个,现在发现用到 API 开发很难办,数据类型不对,不能每个字段都让客户端自己强制转换一下。

查资料后发现 ThinkPHP3.x 的 Model.class.php,提供了 _parseType 方法,在查询完以后进行类型转换,但需要我们手工调一下。

阅读全文 »

今天收到邮件提示 exploded-aar 目录问题在 gradle plugin 2.5 版本修复好了。

Marked as Fixed

in 2.3/2.4 you can look in the build cache entries and look in the input file that indicate the source of the cache entry (maven coordinate).
in 2.5+ we switched to Gradle’s own cache so you’ll have to look in the gradle folder.
If all you need is manually get the aar content you could also manually download the aar and unzip it yourself.

查看 Issue 详情(需要梯子):Issue 页

— 更新于 2017-05-11


升级到 Android Studio 2.3 后,Gradle Plugin 也升级到 2.3.0,对应推荐使用的 Gradle 版本是 3.3。

这时候会发现项目目录下 {module name}/build/intermediates/exploded-aar/ 目录没了,经过一番查找,发现这并不是一个 Bug,是官方刻意为之,它会在 {user name}/.android/build-cache 下生成一部分缓存文件,来代替 exploded-aar ,如果需要生成它,可以配置项目目录下的 gradle.properties ,添加一行内容:

1
android.enableBuildCache=false
阅读全文 »

错误提示如下:

1
2
Gradle sync failed: Cause: error in opening zip file
Consult IDE log for more details (Help | Show Log)

今天升级 2.2 到 2.3 后打开一个项目提示升级 gradle,就同意了,结果报了上面的错误。

大概原因应该是下载的最新的 gradle 包有问题,新升级后配置的代理失效了。

操作如下:

  1. 删除项目目录下的 .gradle/ 整个项目
  2. 查看 gradle/wrapper/gradle-warpper.propertiesdistributionUrl 的 gradle 版本,比如是 3.3 ,然后去 ~/.gradle/warpper/dists/ 下删除对应版本的 gradle ,这里是 gradle-3.3-all
  3. 然后重启 Android Studio 让它重新同步即可

在 Mac 下使用 Android Studio 时常会遇到 Android Monitor 突然不打印日志的情况,目前知道的有三个方法:

  1. 重启 Android Studio

    这个不需要多说,点击 Android Studio 的 File => Invalidate caches / Restart ,选择 Just Restart

  2. 重启 adb

    命令行下输入:adb kill-server 关闭 adb,adb start-server 开启 adb 即可。

  3. 切换 adb 的 root/unroot 模式

    这个实际上还是重启了 adb 。 adb root 使 adb 默认进入 root 模式,adb unroot 使 adb 进入非 root 模式,切换模式会导致 adb 重启。

获取指定包名的 APP 是否还在后台运行,判断 APP 是否存活。

背景

可以根据 App 是否有 Service 分两类情况处理:

  • 没有 Service
  • Service

对于没有 Service 的 App,程序一旦切换到后台,可能很快就被回收了,这里使用 ActivityManager.getRunningTasks(int maxNum) 方法来获取当前正在运行的任务,注意:此方法并不被系统推荐,且是一个 Deprecated 的方法。

对于有 Service 的 App,大多会有多个 Service ,且有可能都是 :remote 类型的,这样在判断上需要进行一定的处理,这里根据 App 的 uid 来判断,避免在一些特殊的情况下判断存活不准确的问题。我们使用 ActivityManager.getRunningServices(int maxNum) 方法获取当前运行中的 Service 列表。

注意:App 的 uid 对于系统内置 App 而言不是唯一的,Android 内置的应用会有共用 uid 的情况。如果你是开发系统内置应用或者类似的东西,务必要自行进行特殊方式检查。

阅读全文 »

翻译自:Using app encryption in Jelly Bean

关键词 : adb install -l


最新的 Android 4.1(Jelly Bean)版本在上周的 Google I / O 大会上发布了,它有一大堆新功能和改进。 其中一个有趣的功能是应用程序加密,除了简短的说明还没有任何细节:“从 Jelly Bean 版本起,Google Play 中的付费应用程序在分发和存储之前,会使用设备特定的密钥加密”。缺乏细节当然会引起猜测,有些人甚至担心,当他们使用一个新的设备时必须回购他们的付费应用程序。 在本文中,我们将介绍如何在操作系统中实施应用加密,展示如何在不通过 Google Play 的情况下安装加密的应用,并了解 Google Play 如何提供加密的应用。

操作系统对加密应用程序的支持

本文之前的版本是基于 Eclipse 框架和二进制的系统镜像,并且缺少一部分。由于 Jelly Bean 已经开源,下面的讨论已经修改,现在是基于 AOSP 代码(4.1.1_r1)。如果你回来重读本文,重点放在第二部分。

阅读全文 »

在编译原生 Contacts 应用时需用到非公开的 API,需要引入 framework 等 jar 包,但在 Android Studio 中 SDK 带的 jar 包的优先级最高,导致引入的 framework 等 jar 包无法被引用,请问如何将 framework 等 jar 包的优先级调成最高?

—— 知乎 在 Android Studio 中如何将依赖的 jar 包放在 SDK 的 android.jar 前?

这是在知乎上的原问题的描述。尝试了该问题下面的多个答案,并没有十分完美的方案,直到一个为公司编译 Android 系统的同事,最近无奈转战到 Android Studio 开始…..

背景

先了解一些基础点:

Android Studio 中的六种依赖

Compile,Provided,APK,Test compile,Debug compile,Release compile

阅读全文 »

背景

Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。

而创建 DialogFragment 有两种方式:

  1. 覆写其 onCreateDialog 方法 — ①
  2. 覆写其 onCreateView 方法 — ②

虽然这两种方式都能实现相同的效果,但是它们各有自己适合的应用场景:

  1. 方法 ①,一般用于创建替代传统的 Dialog 对话框的场景,UI 简单,功能单一。
  2. 方法 ②,一般用于创建复杂内容弹窗或全屏展示效果的场景,UI 复杂,功能复杂,一般有网络请求等异步操作。
阅读全文 »
0%