Android-Ściąganie bazy danych SQLite Android device

Szukałem wszędzie i nie mogę znaleźć naprawdę dokładnej odpowiedzi lub poradnika, Jak to zrobić, jeśli jest to możliwe.

Czy możliwe jest wyciągnięcie w jakikolwiek sposób bazy danych Urządzenia z Androidem bez konieczności rootowania go? muszę tylko wyodrębnić te dane w jakikolwiek sposób, aby zebrać je na moim komputerze, więc jak Mogę to wykonać? Czy muszę przeprogramować aplikację lub jakąkolwiek metodę, o której wiecie, ale pamiętaj, bez rootowania urządzenia. dzięki

Author: DeX03, 2012-04-03

20 answers

Powszechnym sposobem osiągnięcia tego, czego pragniesz, jest użycie polecenia adb pull.

Innym sposobem, który preferuję w większości przypadków, jest skopiowanie bazy danych kodem na kartę SD:

try {
    File sd = Environment.getExternalStorageDirectory();

    if (sd.canWrite()) {
        String currentDBPath = "/data/data/" + getPackageName() + "/databases/yourdatabasename";
        String backupDBPath = "backupname.db";
        File currentDB = new File(currentDBPath);
        File backupDB = new File(sd, backupDBPath);

        if (currentDB.exists()) {
            FileChannel src = new FileInputStream(currentDB).getChannel();
            FileChannel dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
        }
    }
} catch (Exception e) {

}

Nie zapomnij ustawić uprawnienia do zapisu na SD w manifeście, jak poniżej.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 75
Author: KarlKarlsom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-05 03:43:23

Jeśli Twoje urządzenie działa z systemem Android w wersji 4 lub nowszej, możesz pobrać dane aplikacji, w tym bazę danych, Bez roota za pomocą polecenia adb backup, a następnie rozpakować plik kopii zapasowej i uzyskać dostęp do bazy danych SQLite.

Najpierw wykonaj kopię zapasową danych aplikacji na komputerze za pomocą kabla USB za pomocą następującego polecenia, zastąp app.package.name rzeczywistą nazwą pakietu aplikacji.

adb backup -f ~/data.ab -noapk app.package.name

Spowoduje to wyświetlenie monitu o "odblokowanie urządzenia i potwierdzenie operacji tworzenia kopii zapasowej". nie podawaj hasła do szyfrowanie kopii zapasowej , więc możesz go później wyodrębnić. Kliknij przycisk "Utwórz kopię zapasową moich danych" na urządzeniu. Na ekranie pojawi się Nazwa pakietu, który tworzy kopię zapasową, a następnie zostanie zamknięty po pomyślnym zakończeniu.

Wynikowy plik data.ab w folderze domowym zawiera dane aplikacji w formacie kopii zapasowej Androida. Aby go wyodrębnić użyj następującego polecenia:

dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -

Jeśli powyższe zakończyło się błędem openssl:Error: 'zlib' is an invalid command., wypróbuj poniższe.

dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

Wynikiem jest apps/app.package.name/ folder zawierające dane aplikacji, w tym bazę danych sqlite.

Aby uzyskać więcej informacji, sprawdź oryginalny wpis na blogu.

 177
Author: Sergei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 11:52:31

Dla debuggable apps1 na urządzeniach niekorzenionych można użyć następującego polecenia:

adb shell run-as package.name chmod 666 /data/data/package.name/databases/file
adb pull /data/data/package.name/databases/file

Przykład:

adb shell run-as com.app chmod 666 /data/data/com.app/databases/data.db
adb pull /data/data/com.app/databases/data.db

Ustaw ścieżkę adb dla zmiennych środowiska lub użyj polecenia cd do folderu android sdk platform-tools.

Przykład:

cd /folder/android-sdk/platform-tools/

Następnie użyj powyższego polecenia


1 Należy pamiętać, że większość aplikacji w Sklepie Play jest nie debuggable , ponieważ wymaga ustawienia znacznika debuggable w manifest.

 67
Author: Lam Vinh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-29 14:51:16

Większość odpowiedzi tutaj są o wiele bardziej skomplikowane niż muszą być. Jeśli chcesz po prostu skopiować bazę danych aplikacji z telefonu na komputer, potrzebujesz tylko tego polecenia:

adb -d shell "run-as your.package.name cat databases/database.name" > target.sqlite

Wszystko, co musisz wypełnić w powyższym poleceniu, to nazwa pakietu aplikacji, jak nazywa się baza danych i opcjonalnie co / gdzie chcesz, aby baza danych została skopiowana.

Należy pamiętać, że to konkretne polecenie będzie działać tylko wtedy, gdy masz podłączone tylko jedno urządzenie Twój komputer. Parametr -d oznacza, że jedyne podłączone urządzenie będzie celowane. Ale są inne parametry, które można użyć zamiast:

  • -e będzie celować w jedyny działający emulator
  • -s <serialnumber> namierzy urządzenie o określonym numerze seryjnym.

 50
Author: Xaver Kapeller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 13:50:08

Przy użyciu Android Studio 3.0 lub nowszej wersji możliwe jest pobranie bazy danych (również preferencje współdzielone, katalog pamięci podręcznej i inne), jeśli aplikacja działa w trybie debugowania na urządzeniu nie zakorzenionym.

Aby pobrać bazę danych za pomocą android studio wykonaj następujące kroki.

  1. Kliknij Zobacz > Okna Narzędziowe > Device File Explorer .
  2. rozwiń /data/data/[Nazwa-pakietu] węzły.

Kroki w Android Studio 3.0

 27
Author: Shahidul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-20 18:46:14
 adb shell "run-as [package.name] chmod -R 777 /data/data/[package.name]/databases" 
 adb shell "mkdir -p /sdcard/tempDB" 
 adb shell "cp -r /data/data/[package.name]/databases/ /sdcard/tempDB/." 
 adb pull sdcard/tempDB/ . 
 adb shell "rm -r /sdcard/tempDB/*"
 6
Author: Speakeasys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 21:02:47

Dla Ubuntu (nie tylko?):

Zobacz odpowiedź ale zamiast openssl użyj zlib-flate:

Cat appbackup.ab | (dd bs=24 count=0 skip=1; cat) / zlib-flate - uncompress > appbackup.tar

W Przeciwnym Razie openssl prawdopodobnie rzuci:

OpenSSL: Error:' zlib ' jest nieprawidłowym poleceniem.

Ponieważ openssl nie jest kompilowany z obsługą Zlib w Ubuntu

 5
Author: Murmel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:25

Od tego czasu nic nie działa na mnie. Tworzę mały skrypt wsadowy windows oparty na innych odpowiedziach połączonych razem. Mam nadzieję, że to komuś pomoże. Po prostu użycie: backupDatabase [TargetDirectory]. Używa metody backup and Android Backup Extractor .

@echo off

if [%1]==[] goto usage
if [%2]==[] goto usage
if NOT [%4]==[] goto usage

@echo Processing: preparations
set PACKAGE=%1
set APPLICATION_NAME=%2
set TARGET_DIR=%cd%
IF NOT "%~3"=="" set TARGET_DIR=%3

set PATH_ADB="c:\Program Files (x86)\Android\android-studio\sdk\platform-tools"
set PATH_ABE="c:\Programs\android-backup-extractor-20140630-bin"
set PATH_7Z="c:\Program Files\7-Zip"

@echo Processing: backup
%PATH_ADB%\adb.exe backup -f %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab -noapk %PACKAGE%

@echo Processing: unpack
java -jar %PATH_ABE%\abe.jar unpack %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab.tar

@echo Processing: extract
cd %TARGET_DIR%\%APPLICATION_NAME%
%PATH_7Z%\7z.exe e %APPLICATION_NAME%.ab.tar "apps\%PACKAGE%\db\%APPLICATION_NAME%"

@echo Processing: cleaning
del %APPLICATION_NAME%.ab
del %APPLICATION_NAME%.ab.tar
goto :eof

:usage
@echo.Pull out SQLite database file from your android device.
@echo.Needs: - connected device
@echo.       - device enable backup.
@echo.       - application enable backup
@echo.       - application in debug mode
@echo.       - installed Android Backup Extractor 
@echo.       - installed command line TAR extractor (7z, ...)
@echo.Does NOT need: root device
@echo.
@echo.Uses: - ADB backup (set PATH_ADB)
@echo.      - Android Backup Extractor (http://sourceforge.net/projects/adbextractor/) (set PATH_ABE)
@echo.      - Extract TAR container, uses 7z (set PATH_7Z)
@echo.
@echo.Usage: backupDatabase ^<PackageName^> ^<ApplicationName^> [TargetDirectory]
@echo.Example: backupDatabase com.foo.example ExampleApp 
@echo Example: backupDatabase com.foo.example ExampleApp workspace\AndroidProjects\Example
exit /B 1
 1
Author: Wooff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-21 14:03:07

Możesz łatwo wyodrębnić plik sqlite z urządzenia (root nie jest konieczny)

  1. Przejdź do folderu SDK
  2. cd platform-tools
  3. Start adb

    Cd / sdk / platform-tools ./ adb shell

    następnie wpisz następujące polecenie w terminalu

    ./ ADB-D shell " run-as com.your_packagename cat / data/data / com.your_packagename/databases /jokhanaNepal > / sdcard / jokhana.sqlite"

    For eg

    ./ ADB-D shell " run-as com.yuvii.app cat / data / data / com.yuvii.app/databases /jokhanaNepal > / sdcard / jokhana.sqlite"

 1
Author: yubaraj poudel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-03 14:12:39

Alternatywnie możesz użyć mojej biblioteki Ultra Debugger. Umożliwia pobieranie bazy danych jako pliku lub edycję wartości bezpośrednio w przeglądarce. Nie wymaga korzenia, bardzo łatwy w użyciu.

 1
Author: BArtWell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 00:40:30

Na Macu (nie jest Wymagany root)

1. Go to platform-tools folder.
2) Run following command in terminal.

./adb -d shell "run-as your.package.name cat databases/database.sqlite" > database.sqlite

Skopiuje plik SQLITE do folderu platform-tools.

 1
Author: Yogesh Suthar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-12 16:47:59
 > is it possible to pull in any way a database of an Android device without having to root it? 

Tak, Jeśli aplikacja na Androida tworzy kopię pliku bazy danych, która jest dostępna dla wszystkich.

Android chroni aplikacje prywatne dane, dzięki czemu nie są widoczne/dostępne dla innych aplikacji. baza danych to dane prywatne. Twoja aplikacja może oczywiście odczytać plik bazy danych, dzięki czemu może skopiować plik do jakiegoś publicznego widocznego pliku.

 0
Author: k3b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-03 17:08:36

Na zakorzenionym urządzeniu możesz:

// check that db is there
>adb shell
# ls /data/data/app.package.name/databases
db_name.sqlite // a custom named db
# exit
// pull it
>adb pull /data/app.package.name/databases/db_name.sqlite
 0
Author: yanchenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 16:14:47

Bazując na odpowiedzi udzielonej przez Lam Vinha, Oto prosty plik wsadowy, który działa dla mnie na moim Nexusie 1. generacji 7. Monituje użytkownika, aby wprowadzić nazwę pakietu, a następnie nazwę bazy danych (bez .rozszerzenie sqlite) i umieszcza go w c:\temp. Zakłada to, że masz zestaw SDK Androida ustawiony w zmiennych środowiskowych.

@echo off
cd c:\temp\

set /p UserInputPackage= Enter the package name: 
set /p UserInputDB= Enter the database name: 

@echo on
adb shell "run-as %UserInputPackage% chmod 666 /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite"
adb pull /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite
@echo off
pause
 0
Author: chutcher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-18 20:42:30

Jeśli korzystasz z systemu Android 4.0 lub nowszego i korzystasz z komputera mac , Oto skrypt ruby, który zapisze zawartość Twojej aplikacji na pulpicie. Wyobrażam sobie, że to zadziała również w Ubuntu, choć nie testowałem tego.

puts "enter your package name"
package_name = gets.chomp
puts "press the 'Back up my data' button on your device"
`adb backup -f ~/Desktop/data.ab -noapk #{package_name}`
puts "press enter once once the 'Backup finished' toast has appeared"
gets.chomp
puts "extracting..."
`dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -`

Aby uruchomić - > ruby your_ruby_file_name.rb

Ten skrypt jest tylko "happy path" , więc upewnij się, że urządzenie jest podłączone i że adb został dodany do twojego profilu.

 0
Author: Swifty McSwifterton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-08 02:12:33

Oto rozwiązanie ze zdjęciami o tym, jak można uzyskać dostęp do nie zakorzenionego systemu plików 4.2 telefonu z Androidem przez ssh z ubuntu 16.04

Jak uzyskać dostęp do systemu plików nie zakorzenionych 4.2 telefonu android przez ssh z ubuntu 16.04

 0
Author: Zoltán Süle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29

Jeśli próbujesz to zrobić na androidzie 6 poproś o pozwolenie i użyj kodu odpowiedzi na to pytanie

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_RC); 
    return; 
} 

Po przyznaniu

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == STORAGE_PERMISSION_RC) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //permission granted  start reading or writing database
        } else { 
            Toast.makeText(this, "No permission to read external storage.", Toast.LENGTH_SHORT).show();
        } 
    } 
} 
 0
Author: Rodolfo Abarca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 10:37:07

Daję kompletne rozwiązanie "Zapisz" i "Przywróć" bazę danych aplikacji do / z pamięci wewnętrznej (nie do komputera z adb).

Wykonałem dwie metody, jedną do zapisywania i drugą do przywracania bazy danych. Użyj tych metod na końcu OnCreate() w MainActivity (jednej lub drugiej, jeśli chcesz zaoszczędzić lub przywrócić bazę danych).

Zapisz bazę danych do pamięci wewnętrznej:

void copyDatabase (){
        try {
            final String inFileName = "/data/data/<pakage.name>/databases/database.db";
            final String outFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);


            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // Open the empty db as the output stream
            OutputStream output = new FileOutputStream(outFileName);

            // Transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            // Close the streams
            output.flush();
            output.close();
            fis.close();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }

Przywracanie bazy danych z pamięci wewnętrznej:

void restoreDatabase (){
        try {
            final String inFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            final String outFileName = "/data/data/<package.name>/databases/database.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);

            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // Open the empty db as the output stream
            OutputStream output = new FileOutputStream(outFileName);

            // Transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            // Close the streams
            output.flush();
            output.close();
            fis.close();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }
 0
Author: Digital Cubes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 23:04:12

Zawsze jest lepiej, gdy wszystko jest zautomatyzowane.Dlatego napisałem prosty skrypt Pythona do kopiowania pliku db z urządzenia za pomocą ADB. Oszczędza to dużo czasu na rozwój, jeśli robisz to często.

Działa tylko z debuggable apps Jeśli urządzenie nie jest zakorzenione.

Oto link do sedna sprawy.

Uruchom jako: python copyandroiddbfile.py

import sys
import subprocess
import re

#/
# Created by @nieldeokar on 25/05/2018.
#/

# 1. Python script which will copy database file of debuggable apps from the android device to your computer using ADB.
# 2. This script ask for PackageName and DatabaseName at runtime.
# 3. You can make it static by passing -d at as command line argument while running script and setting defaults in following way.
# 4. Edit script and change the values of varialbe packageName and dbName to debuggable app package name and database name then
# run script as : python Copydbfileandroid.py -d 

useDefaults = False


def checkIfPackageInstalled(strSelectedDevice) :

    packageName = 'com.nileshdeokar.healthapp.debug'
    dbName = 'healthapp.db'


    if not useDefaults : 
        print('Please enter package name : ')
        packageName = raw_input()

    packageString = 'package:'+packageName

    try:
        adbCheckIfPackageInstalledOutput = subprocess.check_output('adb -s ' + strSelectedDevice + ' shell pm list packages | grep -x '+ packageString, shell=True)
    except subprocess.CalledProcessError as e:
                print "Package not found"
                return


    if packageString.strip() == adbCheckIfPackageInstalledOutput.strip() : 
        if not useDefaults : 
            print('Please enter db name : ')
            dbName = raw_input()

        adbCopyDbString = 'adb -s '+strSelectedDevice + ' -d shell \"run-as '+packageName+' cat /data/data/'+packageName+'/databases/'+ dbName +'\" > '+dbName

        try:
            copyDbOp = subprocess.check_output(adbCopyDbString,shell=True)
        except subprocess.CalledProcessError as e:
                return

        if "is not debuggable" in copyDbOp :
            print packageString + 'is nto debuggable'

        if copyDbOp.strip() == "":
            print 'Successfully copied '+dbName + ' in current directory'

    else :
        print 'Package is not installed on the device'



defaultString = "-d"
if len(sys.argv[1:]) > 0 and sys.argv[1] == defaultString :
        useDefaults = True

listDevicesOutput = subprocess.check_output("adb devices", shell=True)
listDevicesOutput = listDevicesOutput.replace("List of devices attached"," ").replace("\n","").replace("\t","").replace("\n\n","")

numberofDevices = len(re.findall(r'device+', listDevicesOutput))

connectedDevicesArray = listDevicesOutput.split("device")   
del connectedDevicesArray[-1] 


strSelectedDevice = ''
if(numberofDevices > 1) :
    print('Please select the device : \n'),

    for idx, device in enumerate(connectedDevicesArray):
        print idx+1,device

    selectedDevice = raw_input()

    if selectedDevice.isdigit() :
        intSelected = int(selectedDevice)
        if 1 <= intSelected <= len(connectedDevicesArray) :
            print 'Selected device is : ',connectedDevicesArray[intSelected-1]
            checkIfPackageInstalled(connectedDevicesArray[intSelected-1])
        else :
            print 'Please select in range'
    else : 
        print 'Not valid input'

elif numberofDevices == 1 :
    checkIfPackageInstalled(connectedDevicesArray[0])
elif numberofDevices == 0 :
    print("No device is attached")
 0
Author: Nilesh Deokar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 08:21:32

Jeśli chcesz mieć plik bazy danych

Zobacz DDMS > File explore

Znajdź plik db z nazwy pakietu

Następnie kliknij na pull a file from device (Rooted device only)

 -1
Author: MAC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 12:52:00