Bytom移動端錢包SDK開發基礎
比原專案倉庫:
Github地址:https://github.com/Bytom/bytom
Gitee地址:https://gitee.com/BytomBlockchain/bytom
Bytom-Mobile-Wallet-SDK 是從bytom原始碼中抽離出的錢包層程式碼,並且對錢包層程式碼進行了改造。使用gomobile可以將程式碼 編譯成Android和iOS平臺可用的SDK,使用編譯後的Android和iOS錢包SDK可以在移動端實現建立bytom金鑰、賬戶、地址和交易簽名功能。
Bytom-Mobile-Wallet-SDK原始碼簡介
SDK原始碼放在專案的sdk資料夾中,android和ios資料夾是使用SDK的demo專案,bind.go 中首字母大寫可以外部呼叫的函式會作為提供給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/ndk
cd $GOPATH/src/github.com/bytom-community/mobile
gomobile 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/mobile
gomobile 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
相關文章
- 移動端識別SDK開發包
- 【移動端開發】移動端開發基礎問題
- 移動端開發基礎瞭解
- 移動端佈局基礎viewportView
- 移動端開發模式模式
- 移動端開發技巧
- PHP實戰系列之一:0基礎開發移動端報名功能PHP
- 基於 vagrant搭建移動端的開發環境開發環境
- 移動端開發小結
- 移動端適配 - 基礎知識篇
- C# Xamarin移動開發基礎進修篇C#移動開發
- 移動端App開發 - 01 - 開篇APP
- 以太坊錢包開發系列1 - 建立錢包賬號
- H5移動端開發H5
- 前端開發移動端除錯前端除錯
- 淺談移動端混合開發
- 區塊鏈錢包開發,數字貨幣錢包開發的型別區塊鏈型別
- Swift開發基礎06-閉包Swift
- 一種基於Android、iOS平臺的移動端VIN碼識別SDK,支援二次開發AndroidiOS
- 區塊鏈錢包開發區塊鏈
- 區塊鏈基礎設施——多幣種錢包開發迎來新風口區塊鏈
- imtoken錢包丨metamask小狐狸錢包丨tp錢包系統開發丨去中心化錢包系統開發詳細及原始碼中心化原始碼
- 移動web開發之移動端真機測試Web
- Logan:美團點評的開源移動端基礎日誌庫
- 數字貨幣TP錢包/ImToken錢包/MetaMask小狐狸錢包系統開發(開發流程)丨原始碼分析原始碼
- 移動端SDK介面設計心得體會
- 錢包APP開發和理財中心化錢包介紹APP中心化
- 牆裂科普:移動端適配的基礎概念
- 移動端開發新趨勢FlutterFlutter
- 移動端Modal元件開發雜談元件
- 移動端開發小結(實戰)
- Vue.js開發移動端APPVue.jsAPP
- 移動端 Web 開發踩坑之旅Web
- 移動端開發viewport用法詳解View
- 淺談移動端開發頁面
- 移動端開發適配總結
- 移動端報表JS開發示例JS
- 移動端防抓包實踐