gradle 学习2——生成指定文件名的apk

上一篇Gradle学习了解了Gradle的基本结构和依赖关系,这篇文章介绍下怎么在Android上使用Gradle生成指定包名的APK

需求场景

在我们Android开发基本进入测试阶段后,会根据后台的不同环境,打包出对应不同环境(如SIT、UAT、PRD等)的APK安装包。

每次去手动修改Java类改变后台环境太麻烦还容易忘记修改。打包成功后,还需要手动将默认的包名app-release.apk改成我们需要的包名,也是非常麻烦,有没有直接指定环境,生成指定文件名的安装包呢?

方法是有的,就是利用gradle的分渠道打包特性,下面上代码分别解释。

主要在这两个个地方修改:

  • buildType(构建类型)
  • productFlavors (不同定制的产品)

Read More

Share Comments

gradle 学习

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。它提供灵活的通用构建工具,就像ant。同时完美兼容Maven或Ivy仓库

Gradle的基本组成

项目(Project) 和 任务(tasks),Gradle 里的任何东西都是基于这两个基础概念。

Read More

Share Comments

Android面试知识点整理

只整理android面试中涉及到的知识点。不断补充中。。。

1.Android事件传递机制

下面内容摘选自《Android开发艺术探索》

  • (1) 当一个点击事件发生之后,传递过程遵循如下顺序:Activity -> Window -> View
    如果一个view的onTouchEvent方法返回false,那么它的父容器的onTouchEvent方法将会被调用,依此类推,如果所有的元素都不处理这个事件,那么这个事件将会最终传递给Activity处理(调用Activity的onTouchEvent方法)。

Read More

Share Comments

Android 退出整个应用程序解决方案

关于这个功能,每个公司项目都有自己的解决方案

搜索了一下,网上大概有以下几种方法解决这个问题:

  • (1)System.exit(0);

  • (2)Process.killProcess(Process.myPid());

  • (3)ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);

    activityManager.restartPackage(“packagename”);

但这些貌似不是万能的,有的说在2.2版本后就失效了,那我们怎么办呢?

Read More

Share Comments

使用JNI获取publickey实现

1.前言

之前写过一篇文件是关于JNI学习和积累的文章。
这篇文章主要讲在使用JNI取得Publickey过程中遇到的问题和一些总结。

2.JNI获取Publickey实现

在上篇文章中,最终采用的加密方法来自github项目

但该项目中在4.0.4版本的手机上,取得publickey遇到兼容性问题。

Read More

Share Comments

apk中含有admob广告插件

问题出现

使用这个杀毒软件antivirus-for-android,检测我们团队的apk后,AVG提示警告unwanted software。

生成的报告说是:
Beware of Adware! 1 Types of Adware Detected
Last reported adware activity: Sep 16
Days with adware in last 30: 1 days

见下图:

Read More

Share Comments

ANDROID设计模式之单例模式

本文转载自stormzhang ANDROID设计模式之单例模式 ,内容稍有补充

常用单例模式

什么是设计模式?其实简单的理解就是前人留下来的一些经验总结而已,然后把这些经验起了个名字叫Design Pattern,翻译过来就是设计模式的意思,通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更优雅。设计模式理论上有23种,但是我只会针对Android平台上常用的一些设计模式做分享,今天就先来分享下最常用的单例模式。

Read More

Share Comments

ThreadLocal、HandlerThread、Looper区别

1.前言

Android中非UI线程(WorkThread)不能操作UI线程(MainThread)

handler 发送Message 给MessageQueue,Looper 来轮询消息,如果有Message,然后再发送给Handler,Handler 拿到消息就可以所在的线程执行了。

2.ThreadLocal

Thread这个类有一个变量:ThreadLocal.ThreadLocalMap threadLocals ,这是一个map的数据结构,里面的元素的key就是ThreadLocal,value就是我们自定义的一些目标类。我们可以在自己的多线程类中定义好几个ThreadLocal,然后每一个ThreadLocal put一个特定的目标类,然后以后可以用ThreadLocal get到目标类(用自己作为Thread里map的key),因为每个Thread有自己独自的map,所以这样可以实现每个线程有自己的LocalThread,并且一个Thread里可以有多个LocalThread。

Read More

Share Comments