bs-android-tip

本文深入探讨了Android开发中的关键技巧,包括如何利用handler.post(Runnable)在主线程中执行任务,以及通过Makefile从APK中提取并复制所有so文件到指定目录的方法。此外,还详细介绍了Makefile配置项,如LOCAL_MODULE、LOCAL_CERTIFICATE等,以及它们对APK编译和安装路径的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用别的应用的资源

    public static String getSystemUiString(Context context,String key){
        Resources resources = null;
        try {
            resources = context.getPackageManager().getResourcesForApplication("com.android.systemui");
            int resId = resources .getIdentifier(key,"string","com.android.systemui");
            return resources.getString(resId);
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

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里的常用宏定义
```make
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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值