系统集成任务

作为系统开发人员,经常需要集成第三方APK JAR包 so包等;面对不同的情况,就要熟悉Android-mk语法的各种LOCAL_XXX变量,这篇文章就是对不同情况的一个梳理总结。

首先需要了解

  1. Node Package Manager (NPM): 阅读 Getting Started guide
  2. Modern JavaScript with ES2015/16: 阅读 Babel 的 Learn ES2015 guide
  3. webpack-simple
  4. 这个在 Egghead.io上的 高级 Webpack 课程
  5. vue-loader

//参考markdown格式

集成可执行bin文件

例如:集成预编译好的busybox命令

1
2
3
4
5
6
7
8
9
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := busybox
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_SRC_FILES := busybox
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/xbin
include $(BUILD_PREBUILT)

集成第三方jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES :=zxing android-support-v4 android-support-v13
LOCAL_SRC_FILES :=$(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := SetInput2
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=zxing:libs/zxing-1.6-core.jar
include $(BUILD_MULTI_PREBUILT)

集成不带so包的apk

1
2
3
4
5
6
7
8
9
10
11
12
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := rsota
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/app
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_SUFFIX := .apk
include $(BUILD_PREBUILT)

集成带so的apk

1
2

在国内的Android生态中,所有的APP开发者都是一种流氓的心态,后台服务一大堆,还监听各种广播,导致用户根本不可能完全删除后台服务;有人说既然他们流氓,你不用他们就是,卸载掉啊!!哎,一些主流公司的APP,即使知道他流氓,还真的继续用它,比如支付宝\微信等;

所以采用冻结的方法是最有效,最干净的,只是可惜 pm disable 这个权限Android并没有对普通应用开放,也是一个蛋疼的事情.Android生态也是,申请各种权限不需要root,反而关闭权限需要;

使用冻结APP的场景:

  1. 某些应用开启大量后台服务,导致系统响应缓慢,再不能卸载的情况下,冻结它;
  2. 某些不常用的APP,但是需要的时候重新下载又麻烦,冻结它;
  3. 某些应用后台大量更新数据,消耗流量,冻结它;
  4. 冻结app解冻后,保留所有应用数据,不用担心数据丢失,账号重新登录等;

主要代码实现

冻结APP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void disableApp(String appPackageName){
try {
Process localProcess=Runtime.getRuntime().exec("su");
String cmd="pm disable "+appPackageName+"\n";
DataOutputStream dataOutputStream=new DataOutputStream(localProcess.getOutputStream());
dataOutputStream.writeBytes(cmd);
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
} catch (IOException e) {
e.printStackTrace();
}
}

解冻APP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void enableApp(String appPackageName){
try {
Process localProcess=Runtime.getRuntime().exec("su");
String cmd="pm enable "+appPackageName+"\n";
DataOutputStream dataOutputStream=new DataOutputStream(localProcess.getOutputStream());
dataOutputStream.writeBytes(cmd);
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
} catch (IOException e) {
e.printStackTrace();
}
}