深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
if (!checkBeforeRemote()) return;
try {
mInstalld.createUserData(uuid, userId, userSerial, flags);
}
}
…
public void linkNativeLibraryDirectory(String uuid, String packageName, String nativeLibPath32,
int userId) throws InstallerException {
if (!checkBeforeRemote()) return;
try {
mInstalld.linkNativeLibraryDirectory(uuid, packageName, nativeLibPath32, userId);
}
}
public void createOatDir(String oatDir, String dexInstructionSet)
throws InstallerException {
if (!checkBeforeRemote()) return;
try {
mInstalld.createOatDir(oatDir, dexInstructionSet);
}
}
public void linkFile(String relativePath, String fromBase, String toBase)
throws InstallerException {
if (!checkBeforeRemote()) return;
try {
mInstalld.linkFile(relativePath, fromBase, toBase);
}
}
public void deleteOdex(String apkPath, String instructionSet, String outputPath)
throws InstallerException {
mInstalld.deleteOdex(apkPath, instructionSet, outputPath);
}
public void installApkVerity(String filePath, FileDescriptor verityInput, int contentSize)
throws InstallerException {
if (!checkBeforeRemote()) return;
mInstalld.installApkVerity(filePath, verityInput, contentSize);
}
public boolean reconcileSecondaryDexFile(String apkPath, String packageName, int uid,
String[] isas, @Nullable String volumeUuid, int flags) throws InstallerException {
return mInstalld.reconcileSecondaryDexFile(apkPath, packageName, uid, isas,
volumeUuid, flags);
}
public void invalidateMounts() throws InstallerException {
if (!checkBeforeRemote()) return;
mInstalld.invalidateMounts();
}
…
}
二、com.android.server.SystemService概述
\frameworks\base\services\core\java\com\android\server\SystemService.java
本质上就是对于一些运行在系统进程服务进行了抽象,定义了一些统一的生命周期方法和运行规则(所有方法都必须在系统服务进程的main looper thread中被调用)。
package com.android.server;
import android.os.ServiceManager;
/**
* The base class for services running in the system process. Override and implement
* the lifecycle event callback methods as needed.
* {@hide}
*/
public abstract class SystemService {
…
private final Context mContext;
public SystemService(Context context) {
mContext = context;
}
public abstract void onStart();
…
protected final void publishBinderService(String name, IBinder service) {
publishBinderService(name, service, false);
}
protected final void publishBinderService(String name, IBinder service,
boolean allowIsolated) {
ServiceManager.addService(name, service, allowIsolated);
}
protected final IBinder getBinderService(String name) {
return ServiceManager.getService(name);
}
protected final void publishLocalService(Class type, T service) {
LocalServices.addService(type, service);
}
protected final T getLocalService(Class type) {
return LocalServices.getService(type);
}
private SystemServiceManager getManager() {
return LocalServices.getService(SystemServiceManager.class);
}
}
三、Intsaller系统服务的启动
1、com.android.server.SystemServer#startBootstrapServices 触发Installer系统服务启动
private void startBootstrapServices() {
Installer installer = mSystemServiceManager.startService(Installer.class);
2、com.android.server.SystemServiceManager#startService反射创建并回调com.android.server.pm.Installer#onStart
\frameworks\base\services\core\java\com\android\server\SystemServiceManager.java
2.1、com.android.server.SystemServiceManager#startService(String className)获取Installer的字节码对象
public SystemService startService(String className) {
final Class serviceClass;
serviceClass = (Class)Class.forName(className);
return startService(serviceClass);
}
2.2、com.android.server.SystemServiceManager#startService(java.lang.Class< T >)反射创建Installer对象
/**
* Creates and starts a system service. The class must be a subclass of
* {@link com.android.server.SystemService}.
*/
public T startService(Class serviceClass) {
try {
final String name = serviceClass.getName();
// Create the service.
final T service;
try {
Constructor constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
}
startService(service);
return service;
}
}
2.3、com.android.server.SystemServiceManager#startService(SystemService) 注册到SystemServerManager并触发Installer#onStart回调
public void startService(@NonNull final SystemService service) {
// @link ArrayList mServices 注册到SystemServerManager中
mServices.add(service);
long time = SystemClock.elapsedRealtime();
try {
service.onStart();
}
warnIfTooLong(SystemClock.elapsedRealtime() - time, service, “onStart”);
}
3、com.android.server.pm.Installer#onStart 获取installd 的Binder服务代理对象
3.1、com.android.server.pm.Installer#onStart 触发获取installd 的Binder服务代理对象
@Override
public void onStart() {
if (mIsolated) {
mInstalld = null;
} else {
connect();
}
}
3.2、com.android.server.pm.Installer#connect 真正获取installd 的Binder服务代理对象
private void connect() {
//首先通过ServiceManager 获取installd服务的Binder对象
IBinder binder = ServiceManager.getService(“installd”);
if (binder != null) {
try {
binder.linkToDeath(new DeathRecipient() {
@Override
public void binderDied() {
Slog.w(TAG, “installd died; reconnecting”);
connect();
}
}, 0);
} catch (RemoteException e) {
binder = null;
}
}
if (binder != null) {
//把Binder对象转为具体的Binder服务对象
mInstalld = IInstalld.Stub.asInterface(binder);
try {
invalidateMounts();
} catch (InstallerException ignored) {
}
} else {
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
01135238)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!