diff --git a/android/build.gradle b/android/build.gradle index 228492e..285128d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -27,11 +27,9 @@ android { buildTypes { release { - buildConfigField("String", "PUSHY_BUILD_TIME", "\"${minutesSinceEpoch}\"") resValue("string", "pushy_build_time", "${minutesSinceEpoch}") } debug { - buildConfigField("String", "PUSHY_BUILD_TIME", "\"0\"") resValue("string", "pushy_build_time", "0") } } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 92a5e52..868a3a1 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,5 +1,7 @@ - + + + diff --git a/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java b/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java index eec7e0f..df98502 100644 --- a/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +++ b/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java @@ -60,7 +60,7 @@ public class UpdateContext { } public String getBuildTime() { - return BuildConfig.PUSHY_BUILD_TIME; + return context.getString(R.string.pushy_build_time); } public interface DownloadFileListener { diff --git a/local-cli/src/package.js b/local-cli/src/package.js index 8c835c6..195d5a6 100644 --- a/local-cli/src/package.js +++ b/local-cli/src/package.js @@ -7,7 +7,7 @@ import { question } from './utils'; import { checkPlatform, getSelectedApp } from './app'; -import { getIPAVersion, getApkVersion } from './utils'; +import { getIPAVersion, getAppInfo } from './utils'; const Table = require('tty-table'); export async function listPackage(appId) { @@ -66,14 +66,15 @@ export const commands = { if (!fn) { throw new Error('Usage: pushy uploadApk '); } - const name = await getApkVersion(fn); + const { versionName, buildTime } = await getAppInfo(fn); const { appId } = await getSelectedApp('android'); const { hash } = await uploadFile(fn); const { id } = await post(`/app/${appId}/package/create`, { - name, + name: versionName, hash, + buildTime, }); console.log(`Apk uploaded: ${id}`); }, diff --git a/local-cli/src/utils/index.js b/local-cli/src/utils/index.js index 61d3dbb..4e8a1b2 100644 --- a/local-cli/src/utils/index.js +++ b/local-cli/src/utils/index.js @@ -4,8 +4,8 @@ import * as path from 'path'; import * as fs from 'fs-extra'; -const ApkReader = require('adbkit-apkreader'); import ipaReader from './ipaReader'; +const AppInfoParser = require('app-info-parser'); var read = require('read'); @@ -52,10 +52,21 @@ export function getRNVersion() { }; } -export async function getApkVersion(fn) { - const reader = await ApkReader.open(fn); - const manifest = await reader.readManifest(); - return manifest.versionName; +export async function getAppInfo(fn) { + const parser = new AppInfoParser(fn); + const { versionName, application } = await parser.parse(); + let buildTime = 0; + if (Array.isArray(application.metaData)) { + for (const meta of application.metaData) { + if (meta.name === 'pushy_build_time') { + buildTime = meta.value[0]; + } + } + } + if (buildTime == 0) { + throw new Error('Can not get build time for this app.') + } + return { versionName, buildTime }; } export function getIPAVersion(fn) { diff --git a/package.json b/package.json index f4659a0..4793216 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/reactnativecn/react-native-pushy#readme", "dependencies": { - "adbkit-apkreader": "^3.1.2", + "app-info-parser": "^0.3.5", "cli-arguments": "^0.2.1", "decompress-zip": "^0.3.1", "fs-extra": "^8.1.0", diff --git a/yarn.lock b/yarn.lock index 28f2775..b50f6e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,15 +14,6 @@ acorn@^3.1.0: version "3.3.0" resolved "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -adbkit-apkreader@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/adbkit-apkreader/-/adbkit-apkreader-3.1.2.tgz#86a0c676870aba2f16d0f0948d2c94af58417bd5" - integrity sha512-xFlRkjEuJ8+hEo6BfUWXyaxDm54RtLCBBC4TzYc1S0SQqrE7r31QWfYaUlJH+eJiPGTUzUCd+SUs1cJaCkATnQ== - dependencies: - bluebird "^3.4.7" - debug "~0.7.4" - yauzl "^2.7.0" - align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -73,6 +64,17 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +app-info-parser@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/app-info-parser/-/app-info-parser-0.3.5.tgz#93bec9a635b9e971f89ea9fcb71f32d771a1988d" + integrity sha512-VFUr4jGtwEwg1c+sNeJKiDLCSl2mqw6lrJBnvL1wEYdhiDTd0sqmJvxOpnB7Zh/g2P0n04ExBSJ4JHCcp4WP3g== + dependencies: + bplist-parser "^0.2.0" + bytebuffer "^5.0.1" + cgbi-to-png "^1.0.7" + isomorphic-unzip "^1.1.5" + plist "^3.0.1" + aproba@^1.0.3: version "1.1.1" resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" @@ -536,12 +538,22 @@ base64-js@1.2.0: version "1.2.0" resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" +base64-js@^1.0.2, base64-js@^1.2.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" +big-integer@^1.6.44: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + big-integer@^1.6.7: version "1.6.32" resolved "http://registry.npm.taobao.org/big-integer/download/big-integer-1.6.32.tgz#5867458b25ecd5bcb36b627c30bb501a13c07e89" @@ -567,11 +579,6 @@ bluebird@^2.9.33: version "2.11.0" resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" -bluebird@^3.4.7: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== - boom@2.x.x: version "2.10.1" resolved "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -590,6 +597,13 @@ bplist-parser@0.1.1: dependencies: big-integer "^1.6.7" +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.0.0: version "1.1.6" resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" @@ -631,10 +645,30 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +buffer@^5.0.7, buffer@^5.1.0: + version "5.4.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" + integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +bufferpack@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/bufferpack/-/bufferpack-0.0.6.tgz#fb3d8738a0e1e4e03bcff99f9a75f9ec18a9d73e" + integrity sha1-+z2HOKDh5OA7z/mfmnX57Bip1z4= + buffers@~0.1.1: version "0.1.1" resolved "http://registry.npm.taobao.org/buffers/download/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" +bytebuffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= + dependencies: + long "~3" + camelcase@^1.2.1: version "1.2.1" resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -655,6 +689,16 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +cgbi-to-png@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cgbi-to-png/-/cgbi-to-png-1.0.7.tgz#c7497580f76f87c2f5d825748a9d902b4072c004" + integrity sha512-YR80kxTPuq9oRpZUdQmNEQWrmTKLINk1cfLVfyrV7Rfr9KLtLJdcockPKbreIr4JYAq+DhHBR7w+WA/tF5VDaQ== + dependencies: + bufferpack "0.0.6" + crc "^3.3.0" + stream-to-buffer "^0.1.0" + streamifier "^0.1.1" + chainsaw@~0.1.0: version "0.1.0" resolved "http://registry.npm.taobao.org/chainsaw/download/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -787,6 +831,13 @@ core-util-is@~1.0.0: version "1.0.2" resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +crc@^3.3.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -843,10 +894,6 @@ debug@^2.1.1, debug@^2.2.0: dependencies: ms "0.7.2" -debug@~0.7.4: - version "0.7.4" - resolved "http://registry.npm.taobao.org/debug/download/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - debug@~2.2.0: version "2.2.0" resolved "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -1288,6 +1335,11 @@ iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.15" resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + inflight@^1.0.4: version "1.0.6" resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1436,6 +1488,14 @@ isomorphic-fetch@^2.2.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" +isomorphic-unzip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/isomorphic-unzip/-/isomorphic-unzip-1.1.5.tgz#9e5a18e77e3e760b631ee451f643c784b4f880dd" + integrity sha512-2McA51lWhmO3Kk438jxVcYeh6L+AOqVnl9XdX1yI7GlLA9RwEyTBgGem1rNuRIU2abAmOiv+IagThdUxASY4IA== + dependencies: + buffer "^5.0.7" + yauzl "^2.8.0" + isstream@~0.1.2: version "0.1.2" resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -1652,6 +1712,11 @@ lodash@^4.2.0: version "4.17.4" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + longest@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -1974,6 +2039,15 @@ plist@2.1.0: xmlbuilder "8.2.2" xmldom "0.1.x" +plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + preserve@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" @@ -2329,11 +2403,28 @@ stream-buffers@~2.2.0: version "2.2.0" resolved "http://registry.npm.taobao.org/stream-buffers/download/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" +stream-to-buffer@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9" + integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk= + dependencies: + stream-to "~0.2.0" + +stream-to@~0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d" + integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0= + stream-transform@^1.0.7: version "1.0.8" resolved "https://registry.npm.taobao.org/stream-transform/download/stream-transform-1.0.8.tgz#54f721122d310eca855a16c97939881ab5bbb76c" integrity sha1-VPchEi0xDsqFWhbJeTmIGrW7t2w= +streamifier@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/streamifier/-/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" + integrity sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8= + string-width@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2575,6 +2666,11 @@ xmlbuilder@8.2.2: version "8.2.2" resolved "http://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + xmldom@0.1.x: version "0.1.27" resolved "http://registry.npm.taobao.org/xmldom/download/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" @@ -2635,7 +2731,7 @@ yauzl@2.4.1: dependencies: fd-slicer "~1.0.1" -yauzl@^2.7.0: +yauzl@^2.8.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=