handler.post(Runnable)
这不是在线程中执行的 是在主线程中 要想在线程中 new Thread(new runnable(
handler.post(Runnable)
))
logcat 过滤多个关键字
adb logcat | grep -e "exlight@" -e"yubang"
makefile get all so from apk then copy to out directory
LOCAL_PATH := $(call my-dir)
LOCAL_PATH_SECOND := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := BaiduIME
$(shell rm -rf $(LOCAL_PATH_SECOND)/lib/)
$(shell mkdir -p $(LOCAL_PATH_SECOND)/lib/)
$(shell mkdir -p $(LOCAL_PATH_SECOND)/lib/arm/ && $(shell unzip -j $(LOCAL_PATH_SECOND)/$(LOCAL_MODULE).apk "lib/armeabi-v7a/*.so" -d $(LOCAL_PATH_SECOND)/lib/arm/))
$(shell mkdir -p $(PRODUCT_OUT)/system/priv-app/BaiduIME/lib/arm)
$(shell cp -rf $(LOCAL_PATH)/lib/arm/*.so $(PRODUCT_OUT)/system/priv-app/BaiduIME/lib/arm/)
$(shell rm -rf $(LOCAL_PATH_SECOND)/lib/)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
LOCAL_PRIVILEGED_MODULE 如果不设置或者设置为false,安装位置为system/app; 如果设置为true,安装位置为system/priv-app。
LOCAL_CERTIFICATE := PRESIGNED 表示 这个apk已经签过名了,系统不需要再次 签名
LOCAL_MODULE_CLASS 指定文件类型,apk文件用APPS, 并且 会检查 是否是apk文件,动态库so文件用SHARED_LIBRARIES ,bin文件用EXECUTABLES,其他文件 用ETC
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
LOCAL_MODULE_PATH := $(TARGET_OUT)/presetapp 编译打包后,指定模块最后的目标存放路径
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
LOCAL_MODULE_STEM = systemxpbrowser.apk
表示编译链接后的目标文件的文件名
若需要apk作为32bit的apk运行,则需要在Android.mk中定义
LOCAL_MULTILIB :=32
每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束。
makefile里的常用宏定义
out/target/product/xxx的宏即为:$(PRODUCT_OUT)
out/target/product/xxx/system的宏即为:$(TARGET_OUT)
out/target/product/xxx/root的宏即为:$(TARGET_ROOT_OUT)
git 一键删除新加的文件
git clean -df
userdebug版本删掉此应用
ifneq ($(TARGET_BUILD_VARIANT),userdebug)
#Add for remove SnapdragonCamera
PRODUCT_REMOVED_MODULES += $(BSUI_PRODUCT_OUT)/system/priv-app/SnapdragonCamera/SnapdragonCamera.apk \
$(BSUI_PRODUCT_OUT)/system/priv-app/SnapdragonCamera/oat/arm64/SnapdragonCamera.odex \
$(BSUI_PRODUCT_OUT)/system/priv-app/SnapdragonCamera/oat/arm64/SnapdragonCamera.vdex
默认给予NotificationManagerListener权限
android.app.NotificationManager notificationManager = (android.app.NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);
ComponentName mComponentName = new ComponentName("com.blackshark.exlight","com.blackshark.exlight.system.eventhub.NotificationEventHub");
notificationManager.setNotificationListenerAccessGranted(mComponentName, true);
列出目录下所有文件 文件夹的大小 并按文件大小照降序排序
du -s /vendor/presetapp/* | sort -nr
vendor so vts
预置app放在vendor下 vts测试不过 解决方案将so文件打包
生成patch
git add .
git comm -m "xxx"
git format-patch -1
检测apk是否是V2 签名
Q app调用framework manegr类
需要在framework/base/config/hiddenapi-greylist-classes.txt中添加类的路径名称
com.xxxx.exlight.ExLightManager
adb wifi 调试
adb tcpip 5555
adb shell ifconfig wlan0
adb connect 手机ip地址:5555
adb调试doze
开启:
adb shell dumpsys battery unplug ##设置为非充电
adb shell dumpsys deviceidle enable ##设置idle模式可用
adb shell dumpsys deviceidle force-idle ##强制进入idle模式
##下面是退出idle指令
adb shell dumpsys deviceidle disable
adb shell dumpsys battery reset
查询是否开启doze:
adb shell dumpsys deviceidle
Standby 应用待机模式测试
进入:
adb shell dumpsys battery unplug
adb shell am set-inactive true
退出:
adb shell am set-inactive false
查询
adb shell am get-inactive