如何浏览 Android 个 C++ 源代码
How to navigate Android C++ sources
我很感兴趣 Android 如何启动活动,以及在启动 activity 时如何实现淡入动画。
我可以轻松浏览 Java 来源,例如在 GrepCode 上,发现有一种方法可以覆盖 activity 转换,这将我带到了 IActivityManager.java,它定义了:
public int startActivities(
IApplicationThread caller, String callingPackage, ...);
还有:
public void overridePendingTransition(
IBinder token, String packageName, int enterAnim, int exitAnim);
这两个都使用 RPC 常量调用本机代码,例如:
int START_ACTIVITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+120;
我的问题是:在哪里可以找到实现 startActivities
和 overridePendingTransition
的实际 C++ 代码?
Google returns 什么都没有,看起来 AOSP 代码库分布在多个 Git 存储库(?)中,不知道要查看哪个。
一般来说,如何从 Java 接口导航到该接口的 C++ 实现?
相应的方法在frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
中实现。转到此文件,您将找到方法的实现。
这种不寻常的位置解释如下。在 ActivityManagerService 的情况下,Binder 接口是手动实现的,没有使用 .aidl 描述。接口 IActivityManager.java
由 ActivityManagerNative.java
中的抽象 class ActivityManagerNative
实现,其实际实现实际上在 ActivityManagerService.java
中提供。
我很感兴趣 Android 如何启动活动,以及在启动 activity 时如何实现淡入动画。
我可以轻松浏览 Java 来源,例如在 GrepCode 上,发现有一种方法可以覆盖 activity 转换,这将我带到了 IActivityManager.java,它定义了:
public int startActivities(
IApplicationThread caller, String callingPackage, ...);
还有:
public void overridePendingTransition(
IBinder token, String packageName, int enterAnim, int exitAnim);
这两个都使用 RPC 常量调用本机代码,例如:
int START_ACTIVITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+120;
我的问题是:在哪里可以找到实现 startActivities
和 overridePendingTransition
的实际 C++ 代码?
Google returns 什么都没有,看起来 AOSP 代码库分布在多个 Git 存储库(?)中,不知道要查看哪个。
一般来说,如何从 Java 接口导航到该接口的 C++ 实现?
相应的方法在frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
中实现。转到此文件,您将找到方法的实现。
这种不寻常的位置解释如下。在 ActivityManagerService 的情况下,Binder 接口是手动实现的,没有使用 .aidl 描述。接口 IActivityManager.java
由 ActivityManagerNative.java
中的抽象 class ActivityManagerNative
实现,其实际实现实际上在 ActivityManagerService.java
中提供。