aapt dump badging test.apk | grep "VersionName" | sed -e "s/.*versionName='//" -e "s/' .*//"
এটি ফলাফল হিসাবে কেবল সংস্করণ নম্বরটি দিয়ে প্রশ্নের উত্তর দেয়। যাহোক......
পূর্বে উল্লিখিত লক্ষ্যটি হ'ল সার্ভারে থাকা এপিপি এটি ডাউনলোড বা ইনস্টল করার চেষ্টা করার আগে ইনস্টল হওয়াটির চেয়ে নতুন কিনা to এটি করার সহজতম উপায়টি হ'ল সার্ভারে হোস্ট করা এপিকে ফাইলের নামের সংস্করণ নম্বর অন্তর্ভুক্ত করাmyapp_1.01.apk
তুলনা করার জন্য আপনাকে ইতিমধ্যে ইনস্টল হওয়া অ্যাপগুলির নাম এবং সংস্করণ নম্বরটি ইনস্টল করতে হবে installed আপনার যদি রমটিতে ইতিমধ্যে অন্তর্ভুক্ত না করা হয় তবে আপনার কাছে একটি রুট ডিভাইস বা অ্যাপট বাইনারি এবং ব্যস্তবক্স ইনস্টল করার একটি মাধ্যম প্রয়োজন হবে।
এই স্ক্রিপ্টটি আপনার সার্ভার থেকে অ্যাপ্লিকেশনগুলির তালিকা পাবে এবং যে কোনও ইনস্টল করা অ্যাপ্লিকেশনগুলির সাথে তুলনা করবে। ফলাফলটি আপগ্রেড / ইনস্টলেশনের জন্য পতাকাঙ্কিত একটি তালিকা।
#/system/bin/sh
SERVER_LIST=$(wget -qO- "http://demo.server.com/apk/" | grep 'href' | grep '\.apk' | sed 's/.*href="https://stackoverflow.com//' | \
sed 's/".*//' | grep -v '\/' | sed -E "s/%/\\\\x/g" | sed -e "s/x20/ /g" -e "s/\\\\//g")
LOCAL_LIST=$(for APP in $(pm list packages -f | sed -e 's/package://' -e 's/=.*//' | sort -u); do \
INFO=$(echo -n $(aapt dump badging $APP | grep -e 'package: name=' -e 'application: label=')) 2>/dev/null; \
PACKAGE=$(echo $INFO | sed "s/.*package: name='//" | sed "s/'.*$//"); \
LABEL=$(echo $INFO | sed "s/.*application: label='//" | sed "s/'.*$//"); if [ -z "$LABEL" ]; then LABEL="$PACKAGE"; fi; \
VERSION=$(echo $INFO | sed -e "s/.*versionName='//" -e "s/' .*//"); \
NAME=$LABEL"_"$VERSION".apk"; echo "$NAME"; \
done;)
OFS=$IFS; IFS=$'\t\n'
for REMOTE in $SERVER_LIST; do
INSTALLED=0
REMOTE_NAME=$(echo $REMOTE | sed 's/_.*//'); REMOTE_VER=$(echo $REMOTE | sed 's/^[^_]*_//g' | sed 's/[^0-9]*//g')
for LOCAL in $LOCAL_LIST; do
LOCAL_NAME=$(echo $LOCAL | sed 's/_.*//'); LOCAL_VER=$(echo $LOCAL | sed 's/^[^_]*_//g' | sed 's/[^0-9]*//g')
if [ "$REMOTE_NAME" == "$LOCAL_NAME" ]; then INSTALLED=1; fi
if [ "$REMOTE_NAME" == "$LOCAL_NAME" ] && [ ! "$REMOTE_VER" == "$LOCAL_VER" ]; then echo remote=$REMOTE ver=$REMOTE_VER local=$LOCAL ver=$LOCAL_VER; fi
done
if [ "$INSTALLED" == "0" ]; then echo "$REMOTE"; fi
done
IFS=$OFS
যেহেতু কেউ জিজ্ঞাসা করেছিল যে এপেট ব্যবহার না করে এটি কীভাবে করবেন। এটি apktool এবং কিছুটা স্ক্রিপ্টিং সহ apk তথ্য আহরণ করাও সম্ভব। অ্যান্ড্রয়েডে এই উপায়টি ধীর এবং সহজ নয় তবে আপনি অ্যাপ্টোল সেটআপ চালানোর সময় উইন্ডোজ / ম্যাক বা লিনাক্সে কাজ করবে।
#!/bin/sh
APK=/path/to/your.apk
TMPDIR=/tmp/apktool
rm -f -R $TMPDIR
apktool d -q -f -s --force-manifest -o $TMPDIR $APK
APK=$(basename $APK)
VERSION=$(cat $TMPDIR/apktool.yml | grep "versionName" | sed -e "s/versionName: //")
LABEL=$(cat $TMPDIR/res/values/strings.xml | grep 'string name="title"' | sed -e 's/.*">//' -e 's/<.*//')
rm -f -R $TMPDIR
echo ${LABEL}_$(echo $V).apk
আপনার সার্ভারে একটি ড্রপ ফোল্ডার বিবেচনা করুন। এটিতে অ্যাপস আপলোড করুন এবং একটি ক্রোন টাস্ক নাম পরিবর্তন করে এটিকে আপনার আপডেট ফোল্ডারে নিয়ে যায়।
#!/bin/sh
# Drop Folder script for renaming APKs
# Read apk file from SRC folder and move it to TGT folder while changing filename to APKLABEL_APKVERSION.apk
# If an existing version of the APK exists in the target folder then script will remove it
# Define METHOD as "aapt" or "apktool" depending upon what is available on server
# Variables
METHOD="aapt"
SRC="/home/user/public_html/dropfolders/apk"
TGT="/home/user/public_html/apk"
if [ -d "$SRC" ];then mkdir -p $SRC
if [ -d "$TGT" ]then mkdir -p $TGT
# Functions
get_apk_filename () {
if [ "$1" = "" ]; then return 1; fi
local A="$1"
case $METHOD in
"apktool")
local D=/tmp/apktool
rm -f -R $D
apktool d -q -f -s --force-manifest -o $D $A
local A=$(basename $A)
local V=$(cat $D/apktool.yml | grep "versionName" | sed -e "s/versionName: //")
local T=$(cat $D/res/values/strings.xml | grep 'string name="title"' | sed -e 's/.*">//' -e 's/<.*//')
rm -f -R $D<commands>
;;
"aapt")
local A=$(aapt dump badging $A | grep -e "application-label:" -e "VersionName")
local V=$(echo $A | sed -e "s/.*versionName='//" -e "s/' .*//")
local T=$(echo $A | sed -e "s/.*application-label:'//" -e "s/'.*//")
;;
esac
echo ${T}_$(echo $V).apk
}
# Begin script
for APK in $(ls "$SRC"/*.apk); do
APKNAME=$(get_apk_filename "$APK")
rm -f $TGT/$(echo APKNAME | sed "s/_.*//")_*.apk
mv "$APK" "$TGT"/$APKNAME
done