欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 12解決push framework.jar無法開機(jī)的方法小結(jié)

 更新時(shí)間:2025年05月03日 08:12:24   作者:wj071842154  
這篇文章主要介紹了在Android12中解決push framework.jar無法開機(jī)的方法,包括編譯指令、框架層和services的編譯方法,以及Android12的API標(biāo)準(zhǔn)規(guī)范,如@NonNull、@Nullable、@IntDef、@StringDef等注解的使用規(guī)則,需要的朋友可以參考下

1. Android 編譯指令

以前使用make framework -j16或者在framework/base目錄下使用mm編譯都不會(huì)生成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單編就可以。

會(huì)在out/target/product/qssi/system/framework/framework-res.apk生成framework-res.apk, 把該apk用adb push到設(shè)備目錄/system/framework/下即可。

2. 編譯services

2.1編譯指令

在frameworks/base/services目錄下執(zhí)行 mm

或者在android目錄下執(zhí)行

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標(biāo)準(zhǔn)規(guī)范

3.1 注解的使用

3.1.1 @NonNull和@Nullable

@NonNull:表示返回值、參數(shù)或者field不能是null。 @Nullable:表示返回值、參數(shù)或者field可以是null。 如果沒有標(biāo)注,則會(huì)報(bào)異常:Missing nullability on parameter,當(dāng)編譯報(bào)這個(gè)錯(cuò)誤時(shí),根據(jù)需要添加這兩個(gè)注解。 getter/setter的Nullablility必須一致。

3.1.2 @IntDef和@StringDef

用來接受一組有限的int或者String類型的public常量,可以使用這兩個(gè)注解這個(gè)。這個(gè)注解通常結(jié)合@interface來使用來創(chuàng)建一個(gè)新的注解。例如:

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的規(guī)則

當(dāng)只有一個(gè)回調(diào)方法且永遠(yuǎn)不會(huì)有其他回調(diào)方法時(shí)使用Listener,且注冊監(jiān)聽和解注冊監(jiān)聽的方法必須是add/remove開頭,否則Android Lint編譯不過。

public interface OnFooListener {
    void onFoo();
}
public void addOnFooListener(@NonNull OnFooListener listener) {}
 
public void removeOnFooListener(@NonNull OnFooListener listener) {}

當(dāng)有多個(gè)回調(diào)方法時(shí),或者有關(guān)聯(lián)的常量時(shí),應(yīng)該使用Callback。Callback類可以是一個(gè)interface或者abstract class。添加callback和去掉callback應(yīng)該使用register和unregister開頭的方法。

callback中的方法應(yīng)該以on-開頭。

使用MyObjectCallback代替MyObjectObserver。這個(gè)是否報(bào)錯(cuò)不確定,我是把Listener改為Callback,沒有使用Observer作為回調(diào)。

public abstract class FooCallback {
  public abstract void onStarted();
  public abstract void onStopped();
}
public void registerFooCallback(@NonNull FooCallback callback) {}
 
public void unregisterFooCallback(@NonNull FooCallback callback) {}

如果上述注冊方法沒有在明確的線程中時(shí),則需要在注冊的時(shí)候包含Executor參數(shù),如果不加的話,默認(rèn)在主線程中回調(diào)。

我的register方法沒有添加Executor,則編譯報(bào)錯(cuò):

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會(huì)報(bào)錯(cuò):Enums are discouraged in Android APIs [Enum],因此一般都用@intDef代替,使用新的注解表示。

以上就是Android 12解決push framework.jar無法開機(jī)的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Android 12 push framework.jar無法開機(jī)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論