make framework -j12
heap不足
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g"
两种方式任选其一都可以,然后执行jack重启命令:
out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server
解决编译framework 1kb的问题
https://www.twblogs.net/a/5eb1defb86ec4d105966697d/?lang=zh-cn
将WITH_DEXPREOPT修改成false
,如下两个文件其中的一个修改即可
编译Framework
make framework -j12
adb root
adb remount
adb shell rm -rf /system/framework/arm
adb shell rm -rf /system/framework/arm64
adb push out/target/product/angler/system/framework/framework.jar /system/framework
adb shell am restart
Or
# adb shell start //启动framework
# adb shell stop //停止framework
adb remount 出现 adb disable-verity
dm_verity is enabled on the system partition. Use "adb disable-verity" to disable verity. If you do not, remount may succeed, however, you will still not be able to write to these volumes. remount succeeded
解决
adb disable-verity
adb root
mmm -j12 framework/base/services
or
make services -j12
or
mm -j12
adb push out/target/product/angler/system/framework/services.jar /system/framework/
adb shell am restart
如下我们打印日志看到调用了ActivityManagerService的startActivity
注意:一定要有修改 不然不会生成新的文件,如下改动后大小无变化,但是保存后会触发编译
make framework-res -j12
编译前
编译后
adb push out/target/product/angler/system/framework/framework-res.apk /system/framework
adb shell am restart
https://www.jianshu.com/p/d758646cac80
cd packages/apps/WallpaperPicker/
mm WITH_DEXPREOPT=false #打包出apk
adb shell rm system/app/WallpaperPicker/WallpaperPicker.apk
adb shell rm -r system/app/WallpaperPicker/oat/arm64
adb push out/target/product/angler/system/app/WallpaperPicker/WallpaperPicker.apk system/app/WallpaperPicker
adb shell am restart
打印出默认壁纸的路径
/data/user/0/com.android.wallpaperpicker/files/26_default_thumb2.jpg
这个图片从哪里来?
packages/apps/WallpaperPicker/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java
private static ResourceWallpaperInfo getPreKKDefaultWallpaperInfo(Context context) {
Resources sysRes = Resources.getSystem();
Resources res = context.getResources();
int resId = sysRes.getIdentifier("default_wallpaper", "drawable", "android");
File defaultThumbFile = getDefaultThumbFile(context);
Bitmap thumb = null;
boolean defaultWallpaperExists = false;
if (defaultThumbFile.exists()) {
thumb = BitmapFactory.decodeFile(defaultThumbFile.getAbsolutePath());
defaultWallpaperExists = true;
} else {
InputStreamProvider streamProvider = InputStreamProvider.fromResource(res, resId);
thumb = createThumbnail(
streamProvider, context, streamProvider.getRotationFromExif(context), false);
if (thumb != null) {
defaultWallpaperExists = saveDefaultWallpaperThumb(context, thumb);
}
}
if (defaultWallpaperExists) {
return new ResourceWallpaperInfo(sysRes, resId, new BitmapDrawable(res, thumb));
}
return null;
}
Resources.getSystem() 可以在任何地方进行使用,但是有一个局限,只能获取系统本身的资源。
系统资源存放地址可在 platforms/android-xx/data/res/ 目录下查看
https://unbroken.blog.csdn.net/article/details/127581409