博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bytom移动端钱包SDK开发基础
阅读量:4512 次
发布时间:2019-06-08

本文共 3522 字,大约阅读时间需要 11 分钟。

比原项目仓库:

Github地址:

Gitee地址:

是从bytom源码中抽离出的钱包层代码,并且对钱包层代码进行了改造。使用可以将代码 编译成Android和iOS平台可用的SDK,使用编译后的Android和iOS钱包SDK可以在移动端实现创建bytom密钥、账户、地址和交易签名功能。

Bytom-Mobile-Wallet-SDK源码简介

SDK源码放在项目的sdk文件夹中,android和ios文件夹是使用SDK的demo项目, 中首字母大写可以外部调用的函数会作为提供给Android和iOS调用的API。bytom创建的密钥对会存储在磁盘单独的文件中,而且对私钥进行了加密,账户地址数据是存储在go实现的leveldb中,所以Android和iOS平台也需要提供数据存储的路径。

func InitWallet(storagePath string) {    hsm := pseudohsm.New(storagePath)    walletDB := db.NewDB("wallet", "leveldb", storagePath)    accounts := account.NewManager(walletDB)    assets := asset.NewRegistry(walletDB)    wallet := aWallet.NewWallet(walletDB, accounts, assets, hsm)    api = aApi.API{Wallet: wallet}}

Android和iOS平台调用其他钱包API的之前需要先调用InitWallet这个API,参数是磁盘上的绝对路径,InitWallet会对整个钱包进行一个初始化, 其中最重要是初始化leveldb的存储。其他的CreateKey、CreateAccount、CreateAccountReceiver是创建密钥、账户、地址等API,RestoreWallet API能够对钱包所有账户地址资产进行备份导出json格式的数据。

Bytom-Mobile-Wallet-SDK的编译

SDK代码的编译首先需要正确的安装golang和gomobile,golang需要1.7以上版本。

Android平台需要安装JDK、Android SDK、Android NDK,并且需要将Android SDK的platform-tools、ndk-bundle 添加到PATH系统环境变量中。iOS平台编译环境配置相对比较简单只需要安装Xcode就可以了。
Clone项目到本地$GOPATH/src下:

git clone https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK $GOPATH/src/github.com/bytom-community/mobile

Android

gomobile init -ndk ~/path/to/your/ndkcd $GOPATH/src/github.com/bytom-community/mobilegomobile bind -target=android github.com/bytom-community/mobile/sdk/

如果需要减小SDK的体积给gomobile bind指令加上-ldflags=-s参数:

gomobile bind -target=android -ldflags=-s github.com/bytom-community/mobile/sdk/

执行指令后会在mobile文件夹生成wallet.aar和wallet-sources.jar文件。

iOS

cd $GOPATH/src/github.com/bytom-community/mobilegomobile bind -target=ios github.com/bytom-community/mobile/sdk/

如果需要减小SDK的体积给gomobile bind指令加上-ldflags=-w参数:

$ gomobile bind -target=ios -ldflags=-w github.com/bytom-community/mobile/sdk/

执行指令后会在mobile文件夹生成wallet.framework文件。

由于gomobile现在没有支持bitcode,所以生成的iOS SDK也不支持bitcode。

Bytom-Mobile-Wallet-SDK的使用

Android

拷贝wallet.aar和wallet-sources.ja到Android项目的app的libs文件夹下,并在app module中的build.gradle文件中添加:

android {    repositories {        flatDir { dirs 'libs' }    }}dependencies {    implementation fileTree(include: ['*.jar'], dir: 'libs')    implementation(name: 'wallet', ext: 'aar')}

sync project后可以在Android项目中对SDK的API进行调用:

package io.bytom.community;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import wallet.Wallet;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView keyTextView = (TextView) findViewById(R.id.key_textview);        String storagePath = getFilesDir().toString();        Log.d("storagePath", storagePath);        Wallet.initWallet(storagePath);        String keyResult = Wallet.createKey("Marshall", "123456");        Log.d("keyResult", keyResult);        keyTextView.setText(keyResult);    }}

iOS

通过项目target的Linked frameworks and libraries把wallet.framework添加到项目,可以在iOS项目中对SDK的API进行调用:

#import "ViewController.h"#import "Wallet/Wallet.h"  // Gomobile bind generated framework@interface ViewController ()@end@implementation ViewController@synthesize textLabel;- (void)loadView {    [super loadView];    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    WalletInitWallet(docPath);    textLabel.text = WalletCreateKey(@"kevin",@"123456");}@end

转载于:https://www.cnblogs.com/bytom/p/9617161.html

你可能感兴趣的文章
后台全选功能以及数据的提交方法
查看>>
Android 动画效果 及 自定义动画
查看>>
const与#define相比有什么不同?
查看>>
Eclipse4.7 SpringIDE插件的安装
查看>>
C#面向对象基础
查看>>
Jquery页面加载效果
查看>>
ios对new Date() 的兼容问题
查看>>
Charles常用设置
查看>>
filebeat
查看>>
如何在Bitmap中画图?(MFC)
查看>>
laravel 多检索条件列表查询
查看>>
mysql 行转列 和 列转行
查看>>
有关时延扩展的双语句子
查看>>
工作多年后积累的设计灵活,稳定,优秀WinForms应用程序的最佳实践 WinForms best practice...
查看>>
iOS开发——高级篇——iOS键盘的相关设置(UITextfield)
查看>>
JVMGC机制
查看>>
IAR for AVR 报array is too large错误 【已解决】
查看>>
老子《道德经》第六十二章
查看>>
Junit问题01 利用 @Autowired 注入失效问题
查看>>
连通块
查看>>