Requirement: Need to expose a service/contract from a different process to other apps. For example: getPhoneRecord(recordId), deletePhoneRecord(phoneId) etc.
Potential solutions: Messenger or AIDL
Based on my analysis, I think AIDL is the only option because Messenger provides a very generic way of sending messages across apps. The Messenger is limited to send(Message) on the client-side and handleMessage(Message msg) on the server. There are other differences too such as multi-threading. But, I care for defining an API contract from a service that other apps/consumers can invoke. Is my understanding correct?
Yes, your understanding is correct. In either case you have to clearly define your API. If using Messenger, it is just async, custom messages so if you need your service to send data back you would need some type of similar mechanism on the client side as well. Using AIDL and binders is more in-line with what you describe you'd like to do.