当前位置: 代码网 > it编程>编程语言>Asp.net > Android 12解决push framework.jar无法开机的方法小结

Android 12解决push framework.jar无法开机的方法小结

2025年05月03日 Asp.net 我要评论
1. android 编译指令以前使用make framework -j16或者在framework/base目录下使用mm编译都不会生成framework.jar。1.1 framework层的编译

1. android 编译指令

以前使用make framework -j16或者在framework/base目录下使用mm编译都不会生成framework.jar。

1.1 framework层的编译指令

make -j32 framework-minus-apex

编译通过后,输出路径为 out\target\product\blueline\system\framework\framework.jar

1.2 替换framework.jar

adb root
adb remount
adb shell "rm -rf /system/framework/arm"
adb shell "rm -rf /system/framework/arm64"
adb push framework.jar /system/framework
adb shell sync
adb reboot

或者

adb root
adb remount
adb push arm /system/framework
adb push arm64 /system/framework
adb push framework.jar /system/framework
adb shell sync
adb reboot

1.3 编译frameworks/base/core/res

如果修改frameworks/base/core/res目录下的文件,例如androidmanifest.xml或者其他资源文件,不需要整编framework层,只需要在该目录下mm单编就可以。

会在out/target/product/qssi/system/framework/framework-res.apk生成framework-res.apk, 把该apk用adb push到设备目录/system/framework/下即可。

2. 编译services

2.1编译指令

在frameworks/base/services目录下执行 mm

或者在android目录下执行

mmm frameworks/base/services -j32

或者

make -j32 services

编译通过后,输出路径为 out\target\product\blueline\system\framework\services.jar

2.2 替换services.jar

adb root
adb remount
adb shell "rm -rf /system/framework/arm"
adb shell "rm -rf /system/framework/arm64"
adb push services.jar /system/framework
adb shell "rm -rf /data/dalvik-cache/arm/system@framework@services.jar@classes.* "
adb shell sync
adb reboot

3. android 12的api标准规范

3.1 注解的使用

3.1.1 @nonnull和@nullable

@nonnull:表示返回值、参数或者field不能是null。 @nullable:表示返回值、参数或者field可以是null。 如果没有标注,则会报异常:missing nullability on parameter,当编译报这个错误时,根据需要添加这两个注解。 getter/setter的nullablility必须一致。

3.1.2 @intdef和@stringdef

用来接受一组有限的int或者string类型的public常量,可以使用这两个注解这个。这个注解通常结合@interface来使用来创建一个新的注解。例如:

public final class log {
    /** @hide */
    @intdef({assert, error, warn, info, debug, verbose})
    @retention(retentionpolicy.source)
    public @interface level {}
 
    public static final int verbose = 2;
    public static final int debug = 3;
    public static final int info = 4;
    public static final int warn = 5;
    public static final int error = 6;
    public static final int assert = 7;
}

建议使用同一的前缀。

/** @hide */
@intdef(prefix = { “flag_” }, value = {
  flag_use_logo,
  flag_show_home,
  flag_home_as_up,
});
@retention(retentionpolicy.source)
public @interface displayoptions {}

3.1.3 listener和callback的规则

当只有一个回调方法且永远不会有其他回调方法时使用listener,且注册监听和解注册监听的方法必须是add/remove开头,否则android lint编译不过。

public interface onfoolistener {
    void onfoo();
}
public void addonfoolistener(@nonnull onfoolistener listener) {}
 
public void removeonfoolistener(@nonnull onfoolistener listener) {}

当有多个回调方法时,或者有关联的常量时,应该使用callback。callback类可以是一个interface或者abstract class。添加callback和去掉callback应该使用register和unregister开头的方法。

callback中的方法应该以on-开头。

使用myobjectcallback代替myobjectobserver。这个是否报错不确定,我是把listener改为callback,没有使用observer作为回调。

public abstract class foocallback {
  public abstract void onstarted();
  public abstract void onstopped();
}
public void registerfoocallback(@nonnull foocallback callback) {}
 
public void unregisterfoocallback(@nonnull foocallback callback) {}

如果上述注册方法没有在明确的线程中时,则需要在注册的时候包含executor参数,如果不加的话,默认在主线程中回调。

我的register方法没有添加executor,则编译报错:

registration methods should have overload that accepts delivery executor: registerfoocallback [executorregistration]

因此,改为下边的注册方法:

public void registerfoocallback( @nonnull @callbackexecutor executor executor,
                                 @nonnull foocallback callback)
//unregister方法不需要添加executor
public void unregisterfoocallback(@nonnull foocallback callback) {}

避免使用枚举类enum

在framework层使用enum会报错:enums are discouraged in android apis [enum],因此一般都用@intdef代替,使用新的注解表示。

以上就是android 12解决push framework.jar无法开机的方法小结的详细内容,更多关于android 12 push framework.jar无法开机的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com