比原項目倉庫:android
Github地址:https://github.com/Bytom/bytomios
Gitee地址:https://gitee.com/BytomBlockchain/bytomgit
Bytom-Mobile-Wallet-SDK 是從bytom源碼中抽離出的錢包層代碼,而且對錢包層代碼進行了改造。使用gomobile能夠將代碼 編譯成Android和iOS平臺可用的SDK,使用編譯後的Android和iOS錢包SDK能夠在移動端實現建立bytom密鑰、帳戶、地址和交易簽名功能。github
SDK源碼放在項目的sdk文件夾中,android和ios文件夾是使用SDK的demo項目,bind.go 中首字母大寫能夠外部調用的函數會做爲提供給Android和iOS調用的API。bytom建立的密鑰對會存儲在磁盤單獨的文件中,並且對私鑰進行了加密,帳戶地址數據是存儲在go實現的leveldb中,因此Android和iOS平臺也須要提供數據存儲的路徑。golang
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格式的數據。shell
SDK代碼的編譯首先須要正確的安裝golang和gomobile,golang須要1.7以上版本。
Android平臺須要安裝JDK、Android SDK、Android NDK,而且須要將Android SDK的platform-tools、ndk-bundle 添加到PATH系統環境變量中。iOS平臺編譯環境配置相對比較簡單隻須要安裝Xcode就能夠了。
Clone項目到本地$GOPATH/src下:json
git clone https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK $GOPATH/src/github.com/bytom-community/mobile
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參數:api
gomobile bind -target=android -ldflags=-s github.com/bytom-community/mobile/sdk/
執行指令後會在mobile文件夾生成wallet.aar和wallet-sources.jar文件。app
cd $GOPATH/src/github.com/bytom-community/mobile gomobile bind -target=ios github.com/bytom-community/mobile/sdk/
若是須要減少SDK的體積給gomobile bind指令加上-ldflags=-w參數:ide
$ gomobile bind -target=ios -ldflags=-w github.com/bytom-community/mobile/sdk/
執行指令後會在mobile文件夾生成wallet.framework文件。
因爲gomobile如今沒有支持bitcode,因此生成的iOS SDK也不支持bitcode。
拷貝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); } }
經過項目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