Telephony-C/Java代码分析

本文深入解析Android系统的电话模块实现原理,从硬件层到Java层详细介绍了电话模块的架构设计及核心流程,包括电话拨打与接听的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C代码
Android源码中,hardware/ril目录中包含着Android的telephony底层源码。这个目录下包含着三个子目录,下面是对三个子目录的具体分析。
一、目录hardware/ril/include分析:                                              
       只有一个头文件ril.h包含在此目录下。ril.h中定义了76个如下类型的宏:RIL_REQUEST_XXX ,这些宏代表着客户进程可以向Android telephony发送的命令,包括SIM卡相关的功能,打电话,发短信,网络信号查询等。
二、目录hardware/ril/libril分析:
       本目录下代码负责与客户进程进行交互。在接收客户进程命令后,调用相应函数进行处理,然后将命令响应结果传回客户进程。在收到来自网络端的事件后,也传给客户进程。
文件ril_commands.h:列出了telephony可以接收的命令;每个命令对应的处理函数;以及命令响应的处理函数。
文件ril_unsol_commands.h:列出了telephony可以接收的事件类型;对每个事件的处理函数;
文件ril_event.h/cpp:处理与事件源(端口,modem等)相关的功能。ril_event_loop监视所有注册的事件源,当某事件源有数据到来时,相应事件源的回调函数被触发(firePending -> ev->func())
文件ril.cpp:
1) RIL_register函数:打开监听端口,接收来自客户进程的命令请求 (s_fdListen = android_get_control_socket(SOCKET_NAME_RIL);),当与某客户进程连接建立时,调用listenCallback函数;创建一单独线程监视并处理所有事件源 (通过ril_event_loop)
2)listenCallback函数:当与客户进程连接建立时,此函数被调用。此函数接着调用processCommandsCallback处理来自客户进程的命令请求
3)processCommandsCallback函数:具体处理来自客户进程的命令请求。对每一个命令,ril_commands.h中都规定了对应的命 令处理函数(dispatchXXX),processCommandsCallback会调用这个命令处理函数进行处理。
4)dispatch系列函数:此函数接收来自客户进程的命令己相应参数,并调用onRequest进行处理。
5)RIL_onUnsolicitedResponse函数:将来自网络端的事件封装(通过调用responseXXX)后传给客户进程。
6)RIL_onRequestComplete函数:将命令的最终响应结构封装(通过调用responseXXX)后传给客户进程。
7)response系列函数:对每一个命令,都规定了一个对应的response函数来处理命令的最终响应;对每一个网络端的事件,也规定了一个对应的 response函数来处理此事件。response函数可被onUnsolicitedResponse或者onRequestComplete调用。
三、目录hardware/ril/reference-ril分析:
本目录下代码主要负责与modem进行交互
文件reference-ril.c:此文件核心是两个函数:onRequest和onUnsolicited
onRequest 函数:在这个函数里,对每一个RIL_REQUEST_XXX请求,都转化成相应的AT command,发送给modem,然后睡眠等待。当收到此AT command的最终响应后,线程被唤醒,将响应传给客户进程(RIL_onRequestComplete -> sendResponse)。
onUnsolicited函数:这个函数处理modem从网络端收到的各种事件,如网络信号变化,拨入的电话,收到短信等。然后将时间传给客户进程 (RIL_onUnsolicitedResponse -> sendResponse)
文件atchannel.c:负责向modem读写数据。其中,写数据(主要是AT command)功能运行在主线程中,读数据功能运行在一个单独的读线程中。
函数at_send_command_full_nolock:运行在主线程里面。将一个AT command命令写入modem后进入睡眠状态(使用 pthread_cond_wait或类似函数),直到modem读线程将其唤醒。唤醒后此函数获得了AT command的最终响应并返回。
函数readerLoop运行在一个单独的读线程里面,负责从modem中读取数据。读到的数据可分为三种类型:网络端传入的事件;modem对当前AT command的部分响应;modem对当前AT command的全部响应。对第三种类型的数据(AT command的全部响应),读线程唤醒(pthread_cond_signal)睡眠状态的主线程。
 
Java代码
Android中,telephony相关的java代码主要在下列目录中:
1. frameworks/base/telephony/java/android/telephony
2. frameworks/base/telephony/java/com/android/internal/telephony
3. frameworks/base/services/java/com/android/server/TelephonyRegistry.java
4. packages/apps/Phone
 
目录1中的代码提供Android telephony的公开接口,任何具有权限的第三方应用都可使用,如接口类TelephonyManager。
目录2、3中的代码提供一系列内部接口,目前第三方应用还不能使用。当前似乎只有packages/apps/Phone能够使用
目录4是一个特殊应用,或者理解为一个平台内部进程。其他应用通过intent方式调用这个进程的服务。
 
TelephonyManager主要使用两个服务来访问telephony功能:
1. ITelephony, 提供与telephony 进行操作,交互的接口,在packages/apps/Phone中由PhoneInterfaceManager.java实现。
2. ITelephonyRegistry, 提供登记telephony事件的接口。由frameworks/base/services/java/com/android/server/TelephonyRegistry.java实现。
 
interface CommandsInterface 描述了对电话的所有操作接口,如命令, 查询状态,以及电话事件监听等
class BaseCommands是CommandsInterface的直接派生类,实现了电话事件的处理(发送message给对应的handler)。
而class RIL又派生自BaseCommands。RIL负责实际实现CommandsInterface中的接口方法。RIL通过Socket和rild守护进程进行通讯。对于每一个命令接口方法,如acceptCall,或者状态查询,将它转换成对应的RIL_REQUEST_XXX,发送给rild。线程 RILReceiver监听socket,当有数据上报时,读取该数据并处理。读取的数据有两种,
1. 电话事件,RIL_UNSOL_xxx, RIL读取相应数据后,发送message给对应的handler (详见函数processUnsolicited)
2. 命令的异步响应。(详见函数processSolicited)
 
interface Phone描述了对电话的所有操作接口。 PhoneBase直接从Phone 派生而来。而另外两个类,CDMAPhone和GSMPhone,又从PhoneBase派生而来,分别代表对CDMA 和GSM的操作。
PhoneProxy也从Phone直接派生而来。当当前不需要区分具体是CDMA Phone还是GSM Phone时,可使用PhoneProxy。
 
抽象类Call代表一个call,有两个派生类CdmaCall和GsmCall。
 
interface PhoneNotifier定义电话事件的通知方法
DefaultPhoneNotifier从PhoneNotifier派生而来。在其方法实现中,通过调用service ITelephonyRegistry来发布电话事件。
service ITelephonyRegistey由frameworks/base/services/java/com/android/server/TelephonyRegistry.java实现。这个类通过广播intent,从而触发对应的broadcast receiver。
 
在PhoneApp创建时,
sPhoneNotifier = new DefaultPhoneNotifier();
...
sCommandsInterface = new RIL(context, networkMode, cdmaSubscription);
然后根据当前phone是cdma还是gsm,创建对应的phone,
如:sProxyPhone = new PhoneProxy(new GSMPhone(context,sCommandsInterface, sPhoneNotifier));
 
下面我们来研究一个电话打出去的流程
1. TwelveKeyDialer.java, onKeyUp()
2. TwelveKeyDialer.java, placeCall()
3. OutgoingCallBroadcaster.java, onCreate()
sendOrderedBroadcast(broadcastIntent, PERMISSION,
new OutgoingCallReceiver(), null, Activity.RESULT_OK, number, null);
4. OutgoingCallBroadcaster.java, OutgoingCallReceiver
    doReceive -> context.startActivity(newIntent);
5. InCallScreen.java, onCreate/onNewIntent
6. InCallScreen.java, placeCall
7. PhoneUtils.java, placeCall
8. GSMPhone.java, dial
9. GsmCallTracker.java, dial
10. RIL.java, dial
RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
...
send(rr);
 
下面来研究一个incoming call的流程:
1. 创建GsmPhone时,mCT = new GsmCallTracker(this);
2. 创建GsmCallTracker时:
    cm.registerForCallStateChanged(this, EVENT_CALL_STATE_CHANGE, null); -->   
    mCallStateRegistrants.add(r);
3. RIL中的RILReceiver线程首先读取从rild中传来的数据:processResponse -> processUnsolicited
4. 对应于incoming call,RIL收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED 消息,触发mCallStateRegistrants中的所有记录。
5. GsmCallTracker处理EVENT_CALL_STATE_CHANGE,调用pollCallsWhenSafe
6. 函数pllCallsWhenSafe 处理:
     lastRelevantPoll = obtainMessage(EVENT_POLL_CALLS_RESULT);
     cm.getCurrentCalls(lastRelevantPoll);
7. RIL::getCurrentCalls
    RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);
    ...
    send(rr);
8. 接着RIL调用processSolicited处理RIL_REQUEST_GET_CURRENT_CALLS的返回结果
9. GsmCallTracker的handleMessage被触发,处理事件EVENT_POLL_CALLS_RESULT,调用函数 
    handlePollCalls
10. handlPollCalls 调用
    phone.notifyNewRingingConnection(newRinging);
11. PhoneApp中创建CallNotifier
12. CallNotifier注册:
    registerForNewRingingConnection -> mNewRingingConnectionRegistrants.addUnique(h, what, obj);
Error: exited with code: 1 Command: rm -rf "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar.tmp" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.tmp" && mkdir -p "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars" && out/host/linux-x86/bin/zipsync -d out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars -l out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars/list -f "*.java" out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oguard-javastream-protos/gen/gensrcs/vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/hans/oguard/proto/com/oplus/oguard/module_usage.srcjar out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/gen/aidl/aidl0.srcjar && (if [ -s out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars/list ] || [ -s out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.rsp ] ; then out/host/linux-x86/bin/soong_javac_wrapper prebuilts/jdk/jdk21/linux-x86/bin/javac -J-Xmx4096M -J-XX:OnError="cat hs_err_pid%p.log" -J-XX:CICompilerCount=6 -J-XX:+UseDynamicNumberOfGCThreads -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -Xmaxerrs 9999999 -encoding UTF-8 -sourcepath "" -g -XDskipDuplicateBridges=true -XDstringConcat=inline -processorpath out/soong/.intermediates/tools/platform-compat/java/android/processor/compat/unsupportedappusage/unsupportedappusage-annotation-processor/linux_glibc_common/withres/unsupportedappusage-annotation-processor.jar -processor android.processor.compat.unsupportedappusage.UnsupportedAppUsageProcessor -Xlint:-dep-ann --system=out/soong/.intermediates/build/soong/java/core-libraries/stable-core-platform-api-stubs-system-modules/android_common/system -classpath out/soong/.intermediates/packages/modules/Connectivity/framework/framework-connectivity.impl/android_common/fb69e001df841a7f265af7389a30fdb9/turbine-jarjar/framework-connectivity.jar:out/soong/.intermediates/packages/modules/Connectivity/framework-t/framework-connectivity-t.impl/android_common/fb69e001df841a7f265af7389a30fdb9/turbine-jarjar/framework-connectivity-t.jar:out/soong/.intermediates/frameworks/base/framework/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/framework.jar:out/soong/.intermediates/frameworks/base/framework/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/repackaged-turbine-jarjar/framework.jar:out/soong/.intermediates/frameworks/base/services/services/android_common/cd420de13acbba866dde21c8832127f8/turbine-combined/services.jar:out/soong/.intermediates/frameworks/base/services/services/android_common/cd420de13acbba866dde21c8832127f8/repackaged-turbine-jarjar/services.jar:out/soong/.intermediates/frameworks/opt/net/ims/ims-common/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-jarjar/ims-common.jar:out/soong/.intermediates/frameworks/opt/net/ims/ims-common/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/repackaged-turbine-jarjar/ims-common.jar:out/soong/.intermediates/frameworks/opt/telephony/telephony-common/android_common/77f643e2097e4763f26ad194363082b7/turbine-jarjar/telephony-common.jar:out/soong/.intermediates/frameworks/opt/telephony/telephony-common/android_common/77f643e2097e4763f26ad194363082b7/repackaged-turbine-jarjar/telephony-common.jar:out/soong/.intermediates/prebuilts/sdk/current/androidx/m2repository/androidx/annotation/annotation-jvm/1.9.0-alpha01/androidx.annotation_annotation/android_common/combined/androidx.annotation_annotation.jar:out/soong/.intermediates/tools/platform-compat/java/android/compat/annotation/unsupportedappusage/android_common/turbine-combined/unsupportedappusage.jar:out/soong/.intermediates/system/hardware/interfaces/suspend/aidl/android.system.suspend.control.internal-java/android_common/turbine-combined/android.system.suspend.control.internal-java.jar:out/soong/.intermediates/vendor/oplus/frameworks/base_common/proprietary/common/core/oplus-framework/android_common/77f643e2097e4763f26ad194363082b7/turbine-combined/oplus-framework.jar:out/soong/.intermediates/vendor/oplus/frameworks/base_common/proprietary/common/core/oplus-framework/android_common/77f643e2097e4763f26ad194363082b7/repackaged-turbine-jarjar/oplus-framework.jar:out/soong/.intermediates/art/libartservice/service/service-art.stubs.system_server/android_common/turbine-combined/service-art.stubs.system_server.jar:out/soong/.intermediates/vendor/oplus/packages/subsystemcomponents/service/OplusSubsystemFramework/subsystem-framework/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/subsystem-framework.jar:out/soong/.intermediates/vendor/oplus/packages/subsystemcomponents/service/OplusSubsystemFramework/subsystem-framework/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/repackaged-turbine-jarjar/subsystem-framework.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/MixLut3D/aidl/vendor.oplus.hardware.display.MixLut3D-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.display.MixLut3D-V1-java.jar:out/soong/.intermediates/vendor/oplus/system/netd/server/oplus_netd_aidl_interfaces-platform-java/android_common/turbine-combined/oplus_netd_aidl_interfaces-platform-java.jar:out/soong/.intermediates/vendor/oplus/midas/Obrain/aidl/oplus_midas_aidl_interfaces-platform-java/android_common/turbine-combined/oplus_midas_aidl_interfaces-platform-java.jar:out/soong/.intermediates/vendor/oplus/packages/subsystemcomponents/service/data/lib/oplus-network-utils-java/android_common/fb69e001df841a7f265af7389a30fdb9/turbine-combined/oplus-network-utils-java.jar:out/soong/.intermediates/vendor/oplus/multimedia/audio/SpecailizerPLService/serviceImp/spservice-aidl-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/spservice-aidl-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/oplusvibrator/aidl/vendor.oplus.hardware.oplusvibrator-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.oplusvibrator-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/vibrator/aidl/vendor.oplus.hardware.vibrator-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.vibrator-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/nfcExtns/aidl/vendor.oplus.hardware.nfcExtns-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.nfcExtns-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/misc/aidl/vendor.oplus.hardware.misc-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.misc-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/radio_interface/aidl/radio/vendor.oplus.hardware.radio-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.radio-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/engineer/aidl/vendor.oplus.hardware.engineer-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.engineer-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/transmessage/aidl/vendor.oplus.hardware.transmessage-V1-java/android_common/e7dc8a8f2ca4de93fd82c51599142ec6/turbine-combined/vendor.oplus.hardware.transmessage-V1-java.jar:out/soong/.intermediates/vendor/oplus/hardware/interface/slchalservice/aidl/vendor.oplus.hardware.slchalservice-V1-java/android_common/turbine-combined/vendor.oplus.hardware.slchalservice-V1-java.jar:out/soong/.intermediates/vendor/oplus/stats_client/libocenter/aidl/oplus_ocenter_aidl_interfaces-platform-java/android_common/turbine-combined/oplus_ocenter_aidl_interfaces-platform-java.jar -source 17 -target 17 -d out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes -s out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno @out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.rsp @out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars/list ; fi ) && out/host/linux-x86/bin/soong_zip -jar -o out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar.tmp -C out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno -D out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno && out/host/linux-x86/bin/soong_zip -jar -o out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.tmp -C out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes -D out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes && if ! cmp -s "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.tmp" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar"; then mv "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar.tmp" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/oplus-services-check-reflect.unboosted.jar"; fi && if ! cmp -s "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar.tmp" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar"; then mv "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar.tmp" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/anno.srcjar"; fi && rm -rf "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/srcjars" "out/soong/.intermediates/vendor/oplus/frameworks/base/proprietary/common/services/oplus-services-check-reflect.unboosted/android_common/cd420de13acbba866dde21c8832127f8/javac/classes" Output: vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/payjoy/PayJoyAccessService.java:913: error: variable payJoyflagOR1 might not have been initialized if (payJoyflagOR1 == null) {  ^ vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/payjoy/PayJoyAccessService.java:944: error: variable result might not have been initialized Slog.d(TAG, "setPayJoyflagOR1 result: "+result);  ^ vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/theia/TheiaUtil.java:863: warning: non-varargs call of varargs method with inexact argument type for last parameter; foucsedDisplayContent = sGetTopFocusedDisplayContent.invoke(mRoot, null);  ^ cast to Object for a varargs call cast to Object[] for a non-varargs call and to suppress this warning vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/theia/TheiaUtil.java:912: warning: non-varargs call of varargs method with inexact argument type for last parameter; pid = (int) sGetPid.invoke(app, null);  ^ cast to Object for a varargs call cast to Object[] for a non-varargs call and to suppress this warning vendor/oplus/frameworks/base/proprietary/common/services/core/java/com/android/server/theia/TheiaUtil.java:930: warning: non-varargs call of varargs method with inexact argument type for last parameter; isSleeping = (boolean) sIsSleeping.invoke(focusedDisplayContent, null);  ^ cast to Object for a varargs call cast to Object[] for a non-varargs call and to suppress this warning 2 errors
07-26
FAILED: out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm/boot.art /bin/bash -c "(mkdir -p out/target/product/p12_k37mv1_bsp/symbols/system/framework/arm/ ) && (rm -f out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm//*.art out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm//*.oat out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm//*.art.rel ) && (rm -f out/target/product/p12_k37mv1_bsp/symbols/system/framework/arm//*.art ) && (rm -f out/target/product/p12_k37mv1_bsp/symbols/system/framework/arm//*.oat ) && (rm -f out/target/product/p12_k37mv1_bsp/symbols/system/framework/arm//*.art.rel ) && (ANDROID_LOG_TAGS=\"*:e\" out/host/linux-x86/bin/dex2oatd --runtime-arg -Xms64m --runtime-arg -Xmx64m --compiler-filter=speed-profile --profile-file=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/boot.prof --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-framework_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-telephony-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-telephony-base_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/core-oj_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/okhttp_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/apache-xml_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/voip-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/ims-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/android.hidl.base-V1.0-java_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/android.hidl.manager-V1.0-java_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/framework-oahl-backward-compatibility_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/android.test.base_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-ims-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-telecom-common_intermediates/javalib.jar --dex-file=out/target/common/obj/JAVA_LIBRARIES/mediatek-cta_intermediates/javalib.jar --dex-location=/system/framework/mediatek-common.jar --dex-location=/system/framework/mediatek-framework.jar --dex-location=/system/framework/mediatek-telephony-common.jar --dex-location=/system/framework/mediatek-telephony-base.jar --dex-location=/system/framework/core-oj.jar --dex-location=/system/framework/core-libart.jar --dex-location=/system/framework/conscrypt.jar --dex-location=/system/framework/okhttp.jar --dex-location=/system/framework/bouncycastle.jar --dex-location=/system/framework/apache-xml.jar --dex-location=/system/framework/ext.jar --dex-location=/system/framework/framework.jar --dex-location=/system/framework/telephony-common.jar --dex-location=/system/framework/voip-common.jar --dex-location=/system/framework/ims-common.jar --dex-location=/system/framework/android.hidl.base-V1.0-java.jar --dex-location=/system/framework/android.hidl.manager-V1.0-java.jar --dex-location=/system/framework/framework-oahl-backward-compatibility.jar --dex-location=/system/framework/android.test.base.jar --dex-location=/system/framework/mediatek-ims-common.jar --dex-location=/system/framework/mediatek-telecom-common.jar --dex-location=/system/framework/mediatek-cta.jar --oat-symbols=out/target/product/p12_k37mv1_bsp/symbols/system/framework/arm/boot.oat --oat-file=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm/boot.oat --oat-location=/system/framework/arm/boot.oat --image=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm/boot.art --base=0x70000000 --instruction-set=arm --instruction-set-variant=cortex-a53 --instruction-set-features=default --android-root=out/target/product/p12_k37mv1_bsp/system --runtime-arg -Xnorelocate --compile-pic --no-generate-debug-info --generate-build-id --multi-image --no-inline-from=core-oj.jar --abort-on-hard-verifier-error --abort-on-soft-verifier-error --no-abort-on-soft-verifier-error --generate-mini-debug-info || ( echo \"ERROR: Dex2oat failed to compile a boot image. It is likely that the boot classpath is inconsistent. Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS=\"--runtime-arg -verbose:verifier\" to see verification errors.\" ; false ) && ANDROID_LOG_TAGS=\"*:e\" ANDROID_ROOT=out/target/product/p12_k37mv1_bsp/system ANDROID_DATA=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm/ out/host/linux-x86/bin/patchoatd --input-image-location=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/boot.art --output-image-relocation-directory=out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/arm/ --instruction-set=arm --base-offset-delta=0x10000000 )" patchoatd E 08-01 17:03:32 1204514 1204514 image_space.cc:1761] Could not create image space with image file 'out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/boot.art'. Attempting to fall back to imageless running. Error was: Failed to mmap at expected address, mapped at 0x72f9d8a00000 instead of 0x7057a000 patchoatd E 08-01 17:03:32 1204514 1204514 image_space.cc:1761] Attempted image: out/target/product/p12_k37mv1_bsp/dex_bootjars/system/framework/boot-framework.art patchoatd E 08-01 17:03:32 1204514 1204514 runtime.cc:1290] Dex file fallback disabled, cannot continue without image. patchoatd E 08-01 17:03:32 1204514 1204514 patchoat.cc:485] Unable to initialize runtime [ 32% 292/886] //frameworks/base/media/jni:libmedia2_jni link libmedia2_jni.so ninja: build stopped: subcommand failed. 17:03:37 ninja failed with: exit status 1
08-02
java_library { name: "settings-logtags", srcs: ["src/**/*.logtags"], } genrule { name: "statslog-settings-java-gen", tools: ["stats-log-api-gen"], cmd: "$(location stats-log-api-gen) --java $(out) --module settings" + " --javaPackage com.android.settings.core.instrumentation --javaClass SettingsStatsLog", out: ["com/android/settings/core/instrumentation/SettingsStatsLog.java"], } java_library { name: "statslog-settings", srcs: [ ":statslog-settings-java-gen", ], } soong_config_module_type_import { from: "frameworks/base/Android.bp", module_types: [ "bredr_vs_btadva_java_defaults", ], } bredr_vs_btadva_java_defaults { name: "btadva_settings_java_defaults", soong_config_variables: { bredr_or_btadva: { btadva: { srcs: [ ":settings-bluetooth-adva-srcs", ], } } } } // Build the Settings APK android_library { name: "Settings-core", platform_apis: true, defaults: [ "SettingsLibDefaults", "SettingsLib-search-defaults", //"framework-wifi-vendor-hide-access-defaults", "btadva_settings_java_defaults", ], srcs: [ "src/**/*.java", "src/**/*.aidl" ], static_libs: [ "androidx-constraintlayout_constraintlayout", "androidx.slice_slice-builders", "androidx.slice_slice-core", "androidx.slice_slice-view", "androidx.core_core", "androidx.appcompat_appcompat", "androidx.cardview_cardview", "androidx.preference_preference", "androidx.recyclerview_recyclerview", "com.google.android.material_material", "setupcompat", "setupdesign", "androidx-constraintlayout_constraintlayout-solver", "androidx.lifecycle_lifecycle-runtime", "androidx.lifecycle_lifecycle-extensions", "guava", "jsr305", "settings-contextual-card-protos-lite", "settings-log-bridge-protos-lite", "Password", "McuApplicationManager", "PhoneNotifyStatus", "contextualcards", "heysupport", "StdIDSDK-Settings", "settings-logtags", "statslog-settings", "zxing-core-1.7", "android.hardware.dumpstate-V1.0-java", "android.hardware.dumpstate-V1.1-java", ], libs: [ "telephony-common", "ims-common", "app-compat-annotations", "telephony-ext", "wear-framework", ], } platform_compat_config { name: "settings-platform-compat-config", src: ":Settings-core", system_ext_specific: true, } android_app { name: "Settings", platform_apis: true, certificate: "platform", system_ext_specific: true, privileged: true, required: [ "privapp_whitelist_com.android.settings", "settings-platform-compat-config", ], static_libs: ["Settings-core"], resource_dirs: [], optimize: { proguard_flags_files: ["proguard.flags"], }, libs: [ "telephony-ext", ], } android_library_import { name: "contextualcards", aars: ["libs/contextualcards.aar"], } android_library_import { name: "heysupport", aars: ["libs/heytap-widget-v7.0.18.aar"], libs: [ "framework-res", "androidx.appcompat_appcompat", ], } android_library_import { name: "StdIDSDK-Settings", aars: ["libs/StdIDSDK_Std_release_settings_1.0.4.aar"], libs: [ "framework-res", ], } mmm 单编 settings 后 没看到生成的apk 语法也看不懂 用哪一个替换手机中的 settings apk 看到修改代码后的效果
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值