mirror of https://github.com/BTCPrivate/copay.git
Merge pull request #909 from yemel/feature/android-package
Android packaging with Crosswalk
This commit is contained in:
commit
9091ee0d73
|
@ -49,6 +49,7 @@ version.js
|
||||||
|
|
||||||
android/package
|
android/package
|
||||||
android/*.apk
|
android/*.apk
|
||||||
|
android/*.keystore
|
||||||
|
|
||||||
coverage/
|
coverage/
|
||||||
|
|
||||||
|
|
26
README.md
26
README.md
|
@ -106,6 +106,32 @@ One solution is to use Copay with a Python version manager for 2.6.
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
|
## Android APK
|
||||||
|
|
||||||
|
System Requirements
|
||||||
|
|
||||||
|
* Download [Android SDK](http://developer.android.com/sdk/index.html)
|
||||||
|
* Download and install [Crosswalk 8](https://crosswalk-project.org/#documentation/getting_started) (Use Linux setup for OSX)
|
||||||
|
|
||||||
|
Add to your ~/.bash_profile or ~/.bashrc
|
||||||
|
|
||||||
|
```
|
||||||
|
export CROSSWALK="<path to Crosswalk directory>"
|
||||||
|
```
|
||||||
|
|
||||||
|
To build the APK run the script:
|
||||||
|
|
||||||
|
```
|
||||||
|
sh android/build.sh [-d]
|
||||||
|
```
|
||||||
|
- The -d flag will package the apk in debug mode, allowing [remote debugging chrome](https://developer.chrome.com/devtools/docs/remote-debugging)
|
||||||
|
- The APK file is in **android/Copay_VERSION_arm.apk**
|
||||||
|
|
||||||
|
To install the APK in your device run:
|
||||||
|
|
||||||
|
```
|
||||||
|
adb install -r Copay_VERSION_arm.apk
|
||||||
|
```
|
||||||
|
|
||||||
## Google Chrome Extension
|
## Google Chrome Extension
|
||||||
|
|
||||||
|
|
27
TODO.md
27
TODO.md
|
@ -30,33 +30,6 @@ It was developed to be run on OSX. The outputs are copied to the dist directory
|
||||||
DMG is created with hdiutil
|
DMG is created with hdiutil
|
||||||
EXE is created with makensis (brew install makensis)
|
EXE is created with makensis (brew install makensis)
|
||||||
|
|
||||||
## Android APK
|
|
||||||
|
|
||||||
System Requirements
|
|
||||||
|
|
||||||
* Download [Android SDK](http://developer.android.com/sdk/index.html)
|
|
||||||
* Download and install [Crosswalk](https://crosswalk-project.org/#documentation/getting_started) (Use Linux setup for OSX)
|
|
||||||
|
|
||||||
Add to your ~/.bash_profile or ~/.bashrc
|
|
||||||
|
|
||||||
```
|
|
||||||
export CROSSWALK="<path to Crosswalk directory>"
|
|
||||||
```
|
|
||||||
|
|
||||||
To build the APK run the script:
|
|
||||||
|
|
||||||
```
|
|
||||||
sh android/build.sh [-d]
|
|
||||||
```
|
|
||||||
- The -d flag will package the apk in debug mode, allowing [remote debugging chrome](https://developer.chrome.com/devtools/docs/remote-debugging)
|
|
||||||
- The APK file is in **android/Copay_VERSION_arm.apk**
|
|
||||||
|
|
||||||
To install the APK in your device run:
|
|
||||||
|
|
||||||
```
|
|
||||||
adb install -r Copay_VERSION_arm.apk
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,16 @@ then
|
||||||
DEBUG="--enable-remote-debugging"
|
DEBUG="--enable-remote-debugging"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $# -eq 1 && ! $1 = "-d" ]]
|
||||||
|
then
|
||||||
|
if [ ! -f $BUILDDIR/copay.keystore ]
|
||||||
|
then
|
||||||
|
echo "${OpenColor}${Red}* Can't build production app without a keystore${CloseColor}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
PRODUCTION="--keystore-path=$BUILDDIR/copay.keystore --keystore-alias=copay_play --keystore-passcode=$1"
|
||||||
|
fi
|
||||||
|
|
||||||
# Move to the build directory
|
# Move to the build directory
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
@ -48,13 +58,13 @@ checkOK
|
||||||
echo "${OpenColor}${Green}* Copying all app files...${CloseColor}"
|
echo "${OpenColor}${Green}* Copying all app files...${CloseColor}"
|
||||||
sed "s/APP_VERSION/$VERSION/g" manifest.json > $APPDIR/manifest.json
|
sed "s/APP_VERSION/$VERSION/g" manifest.json > $APPDIR/manifest.json
|
||||||
cd $BUILDDIR/..
|
cd $BUILDDIR/..
|
||||||
cp -af {css,font,img,js,lib,sound,config.js,version.js,index.html,./android/icon.png} $APPDIR
|
cp -af {css,font,img,js,lib,sound,config.js,version.js,index.html,./android/icon.png,./android/logo.png} $APPDIR
|
||||||
checkOK
|
checkOK
|
||||||
|
|
||||||
# Building the APK
|
# Building the APK
|
||||||
echo "${OpenColor}${Green}* Building APK file...${CloseColor}"
|
echo "${OpenColor}${Green}* Building APK file...${CloseColor}"
|
||||||
cd $CROSSWALK
|
cd $CROSSWALK
|
||||||
python make_apk.py --manifest=$APPDIR/manifest.json --target-dir=$BUILDDIR --arch=arm $DEBUG
|
python make_apk.py --manifest=$APPDIR/manifest.json --package=com.bitpay.copay --arch=arm --target-dir=$BUILDDIR $DEBUG $PRODUCTION
|
||||||
checkOK
|
checkOK
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
|
BIN
android/icon.png
BIN
android/icon.png
Binary file not shown.
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 8.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
|
@ -1,12 +1,21 @@
|
||||||
{
|
{
|
||||||
"name": "Copay",
|
"name": "Copay",
|
||||||
"version": "APP_VERSION",
|
"version": "APP_VERSION",
|
||||||
"app": {
|
"start_url": "index.html",
|
||||||
"launch":{
|
"permissions": [
|
||||||
"local_path": "index.html"
|
"Vibration"
|
||||||
}
|
],
|
||||||
|
"xwalk_launch_screen": {
|
||||||
|
"ready_when": "complete",
|
||||||
|
"default": {
|
||||||
|
"background_color": "#2C3E50",
|
||||||
|
"image": "logo.png"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"icons": {
|
"icons": {
|
||||||
"128": "icon.png"
|
"128": "icon.png"
|
||||||
}
|
},
|
||||||
|
"xwalk_hosts": [
|
||||||
|
"https://*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
|
@ -3,7 +3,8 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport" content="width=device-width">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
<meta name="HandheldFriendly" content="true">
|
||||||
<title>Copay - Multisignature Wallet</title>
|
<title>Copay - Multisignature Wallet</title>
|
||||||
<link rel="stylesheet" href="css/foundation.min.css">
|
<link rel="stylesheet" href="css/foundation.min.css">
|
||||||
<link rel="stylesheet" href="css/foundation-icons.css">
|
<link rel="stylesheet" href="css/foundation-icons.css">
|
||||||
|
@ -138,7 +139,7 @@
|
||||||
<div class="large-12 medium-12 small-12 columns">
|
<div class="large-12 medium-12 small-12 columns">
|
||||||
<div class="line-dashed">
|
<div class="line-dashed">
|
||||||
<a ng-click="dowloadBackup()"
|
<a ng-click="dowloadBackup()"
|
||||||
ng-show="!$root.wallet.publicKeyRing.isComplete()">Download seed backup</a>
|
ng-show="!$root.wallet.publicKeyRing.isComplete()">Save seed backup</a>
|
||||||
<button class="button primary radius right"
|
<button class="button primary radius right"
|
||||||
ng-click="backup()"
|
ng-click="backup()"
|
||||||
ng-show="!$root.wallet.publicKeyRing.isBackupReady()"
|
ng-show="!$root.wallet.publicKeyRing.isBackupReady()"
|
||||||
|
@ -849,7 +850,7 @@
|
||||||
<h4 class="large-12 columns"><i class="fi-download m10r"></i> Backup </h4>
|
<h4 class="large-12 columns"><i class="fi-download m10r"></i> Backup </h4>
|
||||||
<p class="large-8 columns text-gray"> Its important to back up your wallet so that you can recover your wallet in case of disaster </p>
|
<p class="large-8 columns text-gray"> Its important to back up your wallet so that you can recover your wallet in case of disaster </p>
|
||||||
<div class="large-4 columns">
|
<div class="large-4 columns">
|
||||||
<a class="button radius secondary expand" ng-click="download()">Download File</a>
|
<a class="button radius secondary expand" ng-click="download()">Save Backup</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-8 columns large-centered line-dashed-h"> </div>
|
<div class="large-8 columns large-centered line-dashed-h"> </div>
|
||||||
|
|
|
@ -33,6 +33,13 @@ var copayApp = window.copayApp = angular.module('copayApp', [
|
||||||
'copayApp.directives',
|
'copayApp.directives',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
copayApp.config(function($sceDelegateProvider) {
|
||||||
|
$sceDelegateProvider.resourceUrlWhitelist([
|
||||||
|
'self',
|
||||||
|
'mailto:**'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
angular.module('copayApp.filters', []);
|
angular.module('copayApp.filters', []);
|
||||||
angular.module('copayApp.services', []);
|
angular.module('copayApp.services', []);
|
||||||
angular.module('copayApp.controllers', []);
|
angular.module('copayApp.controllers', []);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('BackupController',
|
angular.module('copayApp.controllers').controller('BackupController',
|
||||||
function($scope, $rootScope, $location, $window, $timeout, $modal, backupService, walletFactory, controllerUtils) {
|
function($scope, $rootScope, backupService, walletFactory, controllerUtils) {
|
||||||
$scope.download = function() {
|
$scope.download = function() {
|
||||||
backupService.download($rootScope.wallet);
|
backupService.download($rootScope.wallet);
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,6 +28,17 @@ BackupService.prototype.download = function(wallet) {
|
||||||
wallet: ew
|
wallet: ew
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// throw an email intent if we are in the mobile version
|
||||||
|
if (window.xwalk) {
|
||||||
|
var name = wallet.name ? wallet.name + ' ' : '';
|
||||||
|
var partial = partial ? 'Partial ' : '';
|
||||||
|
var subject = 'Copay - ' + name + 'Wallet ' + partial + 'Backup';
|
||||||
|
var body = 'This is the encrypted backup of the wallet ' + wallet.id + ':\n\n' + ew;
|
||||||
|
var mailURL = encodeURI('mailto:?subject=' + subject + '&body=' + body);
|
||||||
|
return window.open(mailURL,'_blank');
|
||||||
|
}
|
||||||
|
|
||||||
// otherwise lean on the browser implementation
|
// otherwise lean on the browser implementation
|
||||||
saveAs(blob, filename);
|
saveAs(blob, filename);
|
||||||
};
|
};
|
||||||
|
|
|
@ -198,7 +198,12 @@ factory('notification', ['$timeout',
|
||||||
$timeout(function removeFromQueueTimeout() {
|
$timeout(function removeFromQueueTimeout() {
|
||||||
queue.splice(queue.indexOf(notification), 1);
|
queue.splice(queue.indexOf(notification), 1);
|
||||||
}, settings[type].duration);
|
}, settings[type].duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Movile notification
|
||||||
|
window.navigator.vibrate([200,100,200]);
|
||||||
|
if (document.hidden && (type == 'info' || type == 'funds')) {
|
||||||
|
new window.Notification(title, {body: content, icon:'img/notification.png'});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.save();
|
this.save();
|
||||||
|
|
Loading…
Reference in New Issue