init
This commit is contained in:
13
src/main/cpp/CMakeLists.txt
Normal file
13
src/main/cpp/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
cmake_minimum_required(VERSION 3.22.1)
|
||||
project("mosis-service")
|
||||
|
||||
set(ANDROID_SDK "/Users/omar/Library/Android/sdk")
|
||||
set(BINDER_DIR "${ANDROID_SDK}/platforms/android-36/optional/libbinder_ndk_cpp")
|
||||
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED
|
||||
mosis-service.cpp
|
||||
com/omixlab/mosis/IMosisService.cpp)
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
|
||||
${CMAKE_CURRENT_LIST_DIR} ${BINDER_DIR})
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME}
|
||||
android log binder_ndk)
|
||||
50
src/main/cpp/aidl/com/omixlab/mosis/BnMosisService.h
Normal file
50
src/main/cpp/aidl/com/omixlab/mosis/BnMosisService.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is auto-generated. DO NOT MODIFY.
|
||||
* Using: /Users/omar/Library/Android/sdk/build-tools/36.1.0/aidl --lang=ndk --min_sdk_version=36 -o src/main/cpp -h src/main/cpp -I src/main/aidl src/main/aidl/com/omixlab/mosis/IMosisService.aidl
|
||||
*
|
||||
* DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
|
||||
* ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
|
||||
* AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "aidl/com/omixlab/mosis/IMosisService.h"
|
||||
|
||||
#include <android/binder_ibinder.h>
|
||||
#include <cassert>
|
||||
|
||||
#ifndef __BIONIC__
|
||||
#ifndef __assert2
|
||||
#define __assert2(a,b,c,d) ((void)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace aidl {
|
||||
namespace com {
|
||||
namespace omixlab {
|
||||
namespace mosis {
|
||||
class BnMosisService : public ::ndk::BnCInterface<IMosisService> {
|
||||
public:
|
||||
BnMosisService();
|
||||
virtual ~BnMosisService();
|
||||
protected:
|
||||
::ndk::SpAIBinder createBinder() override;
|
||||
private:
|
||||
};
|
||||
class IMosisServiceDelegator : public BnMosisService {
|
||||
public:
|
||||
explicit IMosisServiceDelegator(const std::shared_ptr<IMosisService> &impl) : _impl(impl) {
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus getNumber(int32_t* _aidl_return) override {
|
||||
return _impl->getNumber(_aidl_return);
|
||||
}
|
||||
protected:
|
||||
private:
|
||||
std::shared_ptr<IMosisService> _impl;
|
||||
};
|
||||
|
||||
} // namespace mosis
|
||||
} // namespace omixlab
|
||||
} // namespace com
|
||||
} // namespace aidl
|
||||
29
src/main/cpp/aidl/com/omixlab/mosis/BpMosisService.h
Normal file
29
src/main/cpp/aidl/com/omixlab/mosis/BpMosisService.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* This file is auto-generated. DO NOT MODIFY.
|
||||
* Using: /Users/omar/Library/Android/sdk/build-tools/36.1.0/aidl --lang=ndk --min_sdk_version=36 -o src/main/cpp -h src/main/cpp -I src/main/aidl src/main/aidl/com/omixlab/mosis/IMosisService.aidl
|
||||
*
|
||||
* DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
|
||||
* ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
|
||||
* AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "aidl/com/omixlab/mosis/IMosisService.h"
|
||||
|
||||
#include <android/binder_ibinder.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace com {
|
||||
namespace omixlab {
|
||||
namespace mosis {
|
||||
class BpMosisService : public ::ndk::BpCInterface<IMosisService> {
|
||||
public:
|
||||
explicit BpMosisService(const ::ndk::SpAIBinder& binder);
|
||||
virtual ~BpMosisService();
|
||||
|
||||
::ndk::ScopedAStatus getNumber(int32_t* _aidl_return) override;
|
||||
};
|
||||
} // namespace mosis
|
||||
} // namespace omixlab
|
||||
} // namespace com
|
||||
} // namespace aidl
|
||||
54
src/main/cpp/aidl/com/omixlab/mosis/IMosisService.h
Normal file
54
src/main/cpp/aidl/com/omixlab/mosis/IMosisService.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* This file is auto-generated. DO NOT MODIFY.
|
||||
* Using: /Users/omar/Library/Android/sdk/build-tools/36.1.0/aidl --lang=ndk --min_sdk_version=36 -o src/main/cpp -h src/main/cpp -I src/main/aidl src/main/aidl/com/omixlab/mosis/IMosisService.aidl
|
||||
*
|
||||
* DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
|
||||
* ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
|
||||
* AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <android/binder_interface_utils.h>
|
||||
#ifdef BINDER_STABILITY_SUPPORT
|
||||
#include <android/binder_stability.h>
|
||||
#endif // BINDER_STABILITY_SUPPORT
|
||||
|
||||
namespace aidl {
|
||||
namespace com {
|
||||
namespace omixlab {
|
||||
namespace mosis {
|
||||
class IMosisServiceDelegator;
|
||||
|
||||
class IMosisService : public ::ndk::ICInterface {
|
||||
public:
|
||||
typedef IMosisServiceDelegator DefaultDelegator;
|
||||
static const char* descriptor;
|
||||
IMosisService();
|
||||
virtual ~IMosisService();
|
||||
|
||||
static constexpr uint32_t TRANSACTION_getNumber = FIRST_CALL_TRANSACTION + 0;
|
||||
|
||||
static std::shared_ptr<IMosisService> fromBinder(const ::ndk::SpAIBinder& binder);
|
||||
static binder_status_t writeToParcel(AParcel* parcel, const std::shared_ptr<IMosisService>& instance);
|
||||
static binder_status_t readFromParcel(const AParcel* parcel, std::shared_ptr<IMosisService>* instance);
|
||||
static bool setDefaultImpl(const std::shared_ptr<IMosisService>& impl);
|
||||
static const std::shared_ptr<IMosisService>& getDefaultImpl();
|
||||
virtual ::ndk::ScopedAStatus getNumber(int32_t* _aidl_return) = 0;
|
||||
private:
|
||||
static std::shared_ptr<IMosisService> default_impl;
|
||||
};
|
||||
class IMosisServiceDefault : public IMosisService {
|
||||
public:
|
||||
::ndk::ScopedAStatus getNumber(int32_t* _aidl_return) override;
|
||||
::ndk::SpAIBinder asBinder() override;
|
||||
bool isRemote() override;
|
||||
};
|
||||
} // namespace mosis
|
||||
} // namespace omixlab
|
||||
} // namespace com
|
||||
} // namespace aidl
|
||||
161
src/main/cpp/com/omixlab/mosis/IMosisService.cpp
Normal file
161
src/main/cpp/com/omixlab/mosis/IMosisService.cpp
Normal file
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
* This file is auto-generated. DO NOT MODIFY.
|
||||
* Using: /Users/omar/Library/Android/sdk/build-tools/36.1.0/aidl --lang=ndk --min_sdk_version=36 -o src/main/cpp -h src/main/cpp -I src/main/aidl src/main/aidl/com/omixlab/mosis/IMosisService.aidl
|
||||
*
|
||||
* DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
|
||||
* ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
|
||||
* AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
|
||||
*/
|
||||
#include "aidl/com/omixlab/mosis/IMosisService.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <android/binder_parcel.h>
|
||||
#include <android/binder_parcel_utils.h>
|
||||
#include <android/binder_status.h>
|
||||
#include <aidl/com/omixlab/mosis/BnMosisService.h>
|
||||
#include <aidl/com/omixlab/mosis/BpMosisService.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace com {
|
||||
namespace omixlab {
|
||||
namespace mosis {
|
||||
static binder_status_t _aidl_com_omixlab_mosis_IMosisService_onTransact(AIBinder* _aidl_binder, transaction_code_t _aidl_code, const AParcel* _aidl_in, AParcel* _aidl_out) {
|
||||
(void)_aidl_in;
|
||||
(void)_aidl_out;
|
||||
binder_status_t _aidl_ret_status = STATUS_UNKNOWN_TRANSACTION;
|
||||
std::shared_ptr<BnMosisService> _aidl_impl = std::static_pointer_cast<BnMosisService>(::ndk::ICInterface::asInterface(_aidl_binder));
|
||||
switch (_aidl_code) {
|
||||
case (FIRST_CALL_TRANSACTION + 0 /*getNumber*/): {
|
||||
int32_t _aidl_return;
|
||||
|
||||
::ndk::ScopedAStatus _aidl_status = _aidl_impl->getNumber(&_aidl_return);
|
||||
_aidl_ret_status = AParcel_writeStatusHeader(_aidl_out, _aidl_status.get());
|
||||
if (_aidl_ret_status != STATUS_OK) break;
|
||||
|
||||
if (!AStatus_isOk(_aidl_status.get())) break;
|
||||
|
||||
_aidl_ret_status = ::ndk::AParcel_writeData(_aidl_out, _aidl_return);
|
||||
if (_aidl_ret_status != STATUS_OK) break;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
return _aidl_ret_status;
|
||||
}
|
||||
|
||||
static AIBinder_Class* _g_aidl_com_omixlab_mosis_IMosisService_clazz = ::ndk::ICInterface::defineClass(IMosisService::descriptor, _aidl_com_omixlab_mosis_IMosisService_onTransact, nullptr, 0);
|
||||
|
||||
BpMosisService::BpMosisService(const ::ndk::SpAIBinder& binder) : BpCInterface(binder) {}
|
||||
BpMosisService::~BpMosisService() {}
|
||||
|
||||
::ndk::ScopedAStatus BpMosisService::getNumber(int32_t* _aidl_return) {
|
||||
binder_status_t _aidl_ret_status = STATUS_OK;
|
||||
::ndk::ScopedAStatus _aidl_status;
|
||||
::ndk::ScopedAParcel _aidl_in;
|
||||
::ndk::ScopedAParcel _aidl_out;
|
||||
|
||||
_aidl_ret_status = AIBinder_prepareTransaction(asBinderReference().get(), _aidl_in.getR());
|
||||
if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
|
||||
|
||||
_aidl_ret_status = AIBinder_transact(
|
||||
asBinderReference().get(),
|
||||
(FIRST_CALL_TRANSACTION + 0 /*getNumber*/),
|
||||
_aidl_in.getR(),
|
||||
_aidl_out.getR(),
|
||||
0
|
||||
#ifdef BINDER_STABILITY_SUPPORT
|
||||
| static_cast<int>(FLAG_PRIVATE_LOCAL)
|
||||
#endif // BINDER_STABILITY_SUPPORT
|
||||
);
|
||||
if (_aidl_ret_status == STATUS_UNKNOWN_TRANSACTION && IMosisService::getDefaultImpl()) {
|
||||
_aidl_status = IMosisService::getDefaultImpl()->getNumber(_aidl_return);
|
||||
goto _aidl_status_return;
|
||||
}
|
||||
if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
|
||||
|
||||
_aidl_ret_status = AParcel_readStatusHeader(_aidl_out.get(), _aidl_status.getR());
|
||||
if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
|
||||
|
||||
if (!AStatus_isOk(_aidl_status.get())) goto _aidl_status_return;
|
||||
_aidl_ret_status = ::ndk::AParcel_readData(_aidl_out.get(), _aidl_return);
|
||||
if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
|
||||
|
||||
_aidl_error:
|
||||
_aidl_status.set(AStatus_fromStatus(_aidl_ret_status));
|
||||
_aidl_status_return:
|
||||
return _aidl_status;
|
||||
}
|
||||
// Source for BnMosisService
|
||||
BnMosisService::BnMosisService() {}
|
||||
BnMosisService::~BnMosisService() {}
|
||||
::ndk::SpAIBinder BnMosisService::createBinder() {
|
||||
AIBinder* binder = AIBinder_new(_g_aidl_com_omixlab_mosis_IMosisService_clazz, static_cast<void*>(this));
|
||||
#ifdef BINDER_STABILITY_SUPPORT
|
||||
AIBinder_markCompilationUnitStability(binder);
|
||||
#endif // BINDER_STABILITY_SUPPORT
|
||||
return ::ndk::SpAIBinder(binder);
|
||||
}
|
||||
// Source for IMosisService
|
||||
const char* IMosisService::descriptor = "com.omixlab.mosis.IMosisService";
|
||||
IMosisService::IMosisService() {}
|
||||
IMosisService::~IMosisService() {}
|
||||
|
||||
|
||||
std::shared_ptr<IMosisService> IMosisService::fromBinder(const ::ndk::SpAIBinder& binder) {
|
||||
if (!AIBinder_associateClass(binder.get(), _g_aidl_com_omixlab_mosis_IMosisService_clazz)) {
|
||||
#if __ANDROID_API__ >= 31
|
||||
const AIBinder_Class* originalClass = AIBinder_getClass(binder.get());
|
||||
if (originalClass == nullptr) return nullptr;
|
||||
if (0 == strcmp(AIBinder_Class_getDescriptor(originalClass), descriptor)) {
|
||||
return ::ndk::SharedRefBase::make<BpMosisService>(binder);
|
||||
}
|
||||
#endif
|
||||
return nullptr;
|
||||
}
|
||||
std::shared_ptr<::ndk::ICInterface> interface = ::ndk::ICInterface::asInterface(binder.get());
|
||||
if (interface) {
|
||||
return std::static_pointer_cast<IMosisService>(interface);
|
||||
}
|
||||
return ::ndk::SharedRefBase::make<BpMosisService>(binder);
|
||||
}
|
||||
|
||||
binder_status_t IMosisService::writeToParcel(AParcel* parcel, const std::shared_ptr<IMosisService>& instance) {
|
||||
return AParcel_writeStrongBinder(parcel, instance ? instance->asBinder().get() : nullptr);
|
||||
}
|
||||
binder_status_t IMosisService::readFromParcel(const AParcel* parcel, std::shared_ptr<IMosisService>* instance) {
|
||||
::ndk::SpAIBinder binder;
|
||||
binder_status_t status = AParcel_readStrongBinder(parcel, binder.getR());
|
||||
if (status != STATUS_OK) return status;
|
||||
*instance = IMosisService::fromBinder(binder);
|
||||
return STATUS_OK;
|
||||
}
|
||||
bool IMosisService::setDefaultImpl(const std::shared_ptr<IMosisService>& impl) {
|
||||
// Only one user of this interface can use this function
|
||||
// at a time. This is a heuristic to detect if two different
|
||||
// users in the same process use this function.
|
||||
assert(!IMosisService::default_impl);
|
||||
if (impl) {
|
||||
IMosisService::default_impl = impl;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
const std::shared_ptr<IMosisService>& IMosisService::getDefaultImpl() {
|
||||
return IMosisService::default_impl;
|
||||
}
|
||||
std::shared_ptr<IMosisService> IMosisService::default_impl = nullptr;
|
||||
::ndk::ScopedAStatus IMosisServiceDefault::getNumber(int32_t* /*_aidl_return*/) {
|
||||
::ndk::ScopedAStatus _aidl_status;
|
||||
_aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
|
||||
return _aidl_status;
|
||||
}
|
||||
::ndk::SpAIBinder IMosisServiceDefault::asBinder() {
|
||||
return ::ndk::SpAIBinder();
|
||||
}
|
||||
bool IMosisServiceDefault::isRemote() {
|
||||
return false;
|
||||
}
|
||||
} // namespace mosis
|
||||
} // namespace omixlab
|
||||
} // namespace com
|
||||
} // namespace aidl
|
||||
26
src/main/cpp/mosis-service.cpp
Normal file
26
src/main/cpp/mosis-service.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <jni.h>
|
||||
#include <android/binder_ibinder_jni.h>
|
||||
#include <aidl/com/omixlab/mosis/BnMosisService.h>
|
||||
|
||||
using namespace aidl::com::omixlab::mosis;
|
||||
|
||||
class NativeService : public BnMosisService {
|
||||
public:
|
||||
ndk::ScopedAStatus getNumber(int32_t *_aidl_return) override {
|
||||
*_aidl_return = 100;
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
};
|
||||
|
||||
static std::shared_ptr<NativeService> g_service;
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_com_omixlab_mosis_NativeService_getBinderNative(JNIEnv *env, jobject thiz) {
|
||||
if (!g_service)
|
||||
{
|
||||
g_service = ndk::SharedRefBase::make<NativeService>();
|
||||
|
||||
}
|
||||
return AIBinder_toJavaBinder(env, g_service->asBinder().get());
|
||||
}
|
||||
Reference in New Issue
Block a user