系统集成任务
作为系统开发人员,经常需要集成第三方APK
JAR包
so包
等;面对不同的情况,就要熟悉Android-mk语法的各种LOCAL_XXX变量,这篇文章就是对不同情况的一个梳理总结。
首先需要了解
- Node Package Manager (NPM): 阅读 Getting Started guide
- Modern JavaScript with ES2015/16: 阅读 Babel 的 Learn ES2015 guide
- webpack-simple
- 这个在 Egghead.io上的 高级 Webpack 课程
- 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
在国内的Android生态中,所有的APP开发者都是一种流氓的心态,后台服务一大堆,还监听各种广播,导致用户根本不可能完全删除后台服务;有人说既然他们流氓,你不用他们就是,卸载掉啊!!哎,一些主流公司的APP,即使知道他流氓,还真的继续用它,比如支付宝\微信等;
所以采用冻结的方法是最有效,最干净的,只是可惜 pm disable 这个权限Android并没有对普通应用开放,也是一个蛋疼的事情.Android生态也是,申请各种权限不需要root,反而关闭权限需要;
使用冻结APP的场景:
- 某些应用开启大量后台服务,导致系统响应缓慢,再不能卸载的情况下,冻结它;
- 某些不常用的APP,但是需要的时候重新下载又麻烦,冻结它;
- 某些应用后台大量更新数据,消耗流量,冻结它;
- 冻结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(); } }
|