本文主要是介绍Android 12解决push framework.jar无法开机的方法小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s...
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_LOGChina编程O, 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 OnpythonFooListener { 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,没有使js用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会报编程China编程错:Enums are discouraged in Android APIs [Enum],因此一般都用@intDef代替,使用新android的注解表示。
以上就是Android 12解决push framework.jar无法开机的方法小结的详细内容,更多关于Android 12 push framework.jar无法开机的资料请关注China编程(www.chinasem.cn)其它相关文章!
这篇关于Android 12解决push framework.jar无法开机的方法小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!