Android - SQlite veritabanı android cihazını çekiyor


102

Her yere baktım ve mümkünse bunun nasıl yapılacağına dair gerçek bir kesin cevap veya öğretici bulamıyorum.

Root yapmak zorunda kalmadan bir Android cihazının veritabanını herhangi bir şekilde çekmek mümkün müdür? Bilgisayarımda toplamak için bu verileri herhangi bir şekilde çıkarmam gerekiyor, peki bunu nasıl yapabilirim? Uygulamayı veya bildiğiniz yöntemi yeniden programlamam gerekiyor mu, ancak cihazı köklendirmeden unutmayın. Teşekkürler




1
stackoverflow.com/questions/13006315 Db'yi köklendirme olmadan çekin
Naveen Prince P

Yanıtlar:


78

İstediğinizi elde etmenin yaygın bir yolu, ADB çekme komutunu kullanmaktır.

Çoğu durumda tercih ettiğim başka bir yol, veritabanını kodla SD karta kopyalamaktır:

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) {

}

Aşağıda olduğu gibi manifestinizde SD üzerine yazma iznini ayarlamayı unutmayın.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

1
Peki bunu SD kartı olmayan bir samsung galaxy sekmesinde kullanacağım, peki bunu orada nasıl yapacağım?
DeX03

ve çift // kullanmak zorundayım?
DeX03

Evet, bunun nedeni / karakterinin özel karakter dizisi olmasıdır. // içinde "//", / ile sonuçlanacaktır.
KarlKarlsom

4
Veritabanı yolunu oluşturmak yerine SQLiteDatabase'in bir getPathyöntemi vardır.
Will

Harika cevap. çok akıllı, kullanışlı ve basit.
Gundu Bandgar

179

Cihazınız Android v4 veya üstünü çalıştırıyorsa, veritabanı dahil olmak üzere uygulama verilerini root olmadanadb backup komutunu kullanarak çekebilir , ardından yedekleme dosyasını çıkarabilir ve sqlite veritabanına erişebilirsiniz.

Öncelikle aşağıdaki komutu kullanarak uygulama verilerini USB kablosuyla PC'nize yedekleyin, uygulamanın app.package.namegerçek paket adıyla değiştirin .

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

Bu, sizden "cihazınızın kilidini açmanızı ve yedekleme işlemini onaylamanızı" ister. Yedek şifreleme için bir parola sağlamayın , böylece daha sonra ayıklayabilirsiniz. Cihazınızda "Verilerimi yedekle" düğmesini tıklayın. Ekran, yedeklemekte olduğunuz paketin adını gösterecek, ardından başarıyla tamamlandığında kendi kendine kapanacaktır.

data.abAna klasörünüzdeki sonuç dosyası, android yedekleme biçiminde uygulama verilerini içerir. Çıkarmak için aşağıdaki komutu kullanın:

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

Yukarıdakiler openssl:Error: 'zlib' is an invalid command.hatayla sona erdiyse, aşağıdakileri deneyin.

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

Sonuç apps/app.package.name/ sqlite veritabanı dahil olmak üzere uygulama verilerini içeren klasördür.

Daha fazla ayrıntı için orijinal blog gönderisine bakabilirsiniz .


9
Zlib olmadan derlenmiş zlib yapmayanlar için, verileri python ile çıkarmak için blog.shvetsov.com/2013/02/… adresindeki yanıtı kontrol edin .
ingh.am

2
Unpack komutunun kullanılamadığı Windows kullanıcıları için, "Android Backup Extractor" Java Uygulamasını ( sourceforge.net/projects/adbextractor ) kullanabilirsiniz. .Ab dosyasını açmaya yönelik komutlar için forum.xda-developers.com/showthread.php?t=2011811 adresine bakın .
lalitm

7
MacBook Pro'mda, klasöre herhangi bir şey yapıldığına dair hiçbir kanıt olmadığını gösterdikten sonra HOWEVER openssl:Error: 'zlib' is an invalid command.ile yanıtladığım mesajı alıyorum . Sadece 17 bayt olduğu için bu komutun da başarısız olduğunu varsayıyorum. Bir hata ayıklama uygulamasından veri tabanını alamamanın kötü olduğunu düşünüyorum !! dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -17+0 records in17+0 records out17 bytes transferred in 0.000064 secsadb pull
Someone Somewhere

12
profesyonel ipucu: uygulamanın manifest dosyasıandroid:allowBackup="false"
Someone Somewhere

9
Benim opensslMac OS X üzerinde desteklemediği zlibben demlemek birini yeniden yüzden komutu ya: brew reinstall openssl. Bu, sistem açılımınızın yerini almaz. Bu nedenle, PATH komutunu yalnızca mevcut oturum için değiştirdim: export PATH=/usr/local/opt/openssl/bin:$PATHbundan sonra komutları bu yanıttan başarıyla gerçekleştirebildim.
Aleks N.

69

İçin debuggable uygulamalar 1 üzerinde olmayan köklü cihazlar , komut aşağıdaki kullanın olabilir:

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

Misal:

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

Çevre Değişkenleri için PATH adb ayarlayın veya android sdk klasör platform araçlarına cd komutunu kullanın.

Misal:

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

sonra yukarıdaki komutu kullanın


1 Manifest'te hata ayıklama bayrağının ayarlanmasını gerektirdiğinden , Play Store'daki çoğu uygulamanın hata ayıklaması yapılamayacağını unutmayın .


8
package.nameUygulamanın paketini değiştirdikten sonra şu hata döndürülüyor:run-as: Package 'com.my.app' is unknown
Someone Somewhere

3
Görünüşe göre tüm telefonlar için çalışmıyor. Nexus 4 için çalışır, örneğin SGS4 için çalışmaz.
Roman Minenok

2
Db dosyası nereye kaydedilir?
Vojtěch Pešek

3
Bu eskiden benim için çalışıyordu, ancak bunu Android 5'e güncellenen Nexus 7'imde çalıştıracak gibi görünmüyorum. Bunun Android 5'de çalıştığını kimse onaylayabilir mi?
treesAreEverywhere

15
İşte Android 5 için bir hack (Lollipop) adb shell "run-as [paket_adı] chmod -R 777 / data / data / [paket_adı] / veritabanları" adb shell "mkdir -p / sdcard / tempDB" adb shell "cp -r / veri / veri / [paket_adı] / veritabanları / / sdcard / tempDB /. " adb çekme sdcard / tempDB /. adb shell "rm -r / sdcard / tempDB / *"
Rubin Yoo

55

Buradaki cevapların çoğu olması gerekenden çok daha karmaşık. Yalnızca uygulamanızın veritabanını telefonunuzdan bilgisayarınıza kopyalamak istiyorsanız, bu komuta ihtiyacınız var:

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

Yukarıdaki komutu doldurmanız gereken tek şey, uygulamanızın paket adı, veritabanının adı ve isteğe bağlı olarak veritabanının neye / nereye kopyalanmasını istediğinizdir.

Lütfen bu özel komutun yalnızca bilgisayarınıza bağlı tek bir aygıtınız varsa çalışacağını unutmayın. -dSadece bağlı cihaz hedeflenecektir parametre anlamına gelir. Ancak bunun yerine kullanabileceğiniz başka parametreler vardır:

  • -e çalışan tek öykünücüyü hedefleyecek
  • -s <serialnumber> belirli bir seri numarasına sahip bir cihazı hedefleyecektir.


Bu dosyayı nasıl açabilirim?
Jehad

@Jehad: Aynı problemi yaşadım. Bu yolu buldum ve benim için çalışıyor. Telefonunuzda SSHDroid yükleyin adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db" başlatmak SSHDroidbaşlangıç FileZilla ve SFTP protokolü yoluyla telefonunuza bağlayın. / Mnt / sdcard'ı varsayılan uzak dizin olarak ayarlayın.
Zoltán Süle

Kendi uygulamanızın veritabanını almak istediğinizde en kolay cevap. İki ekleme: 1) veritabanı adınızdan emin değilseniz, veritabanı klasöründeki dosyaları listelemek için bir ls komutunu kullanabilirsiniz ( adb -d shell "run-as your.package.name ls databases") ve 2) veritabanıyla birlikte diğer ilişkili dosyaları da almak isteyebilirsiniz. -smh ve -wal dosyalarını ayıklama durumum SQLite için DB Browser'ın veritabanını açmasını sağlamanın tek yoluydu
Ronan

36

Uygulama köklü olmayan cihazda hata ayıklama modunda çalışıyorsa, Android Studio 3.0 veya sonraki sürümünü kullanarak veritabanını (ayrıca paylaşılan tercih, önbellek dizini ve diğerleri) çekmek mümkündür.

Android stüdyosunu kullanarak veritabanını çekmek için aşağıdaki adımları izleyin.

  1. Click Görünüm > Araç Windows'u > Cihaz Dosya Gezgini .
  2. / Data / data / [paket-adı] düğümlerini genişletin .

Android Studio 3.0'da izlenen adımlar


Teşekkürler. Bir emülatörden indirilen dosyalar, kökleri kaldırılmamış Galaxy S4'ten alınamaz.
CoolMind

Veritabanını herhangi bir uygulamadan veya yalnızca kendi uygulamanızdan alabilir misiniz?
live-love

Ön koşul dışında herhangi bir uygulama hata ayıklanabilir olmalıdır.
Shahidul

6
 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/*"

5

Ubuntu için (sadece değil?):

Sergeis Cevabına bakın, ancak openssl yerine zlib-flate kullanın:

kedi appbackup.ab | (dd bs = 24 say = 0 atlama = 1; cat) | zlib-flate -uncompress> appbackup.tar

Aksi takdirde openssl muhtemelen şunları atacaktır:

openssl: Hata: 'zlib' geçersiz bir komuttur.

çünkü openssl Ubuntu'da zlib desteği ile derlenmemiştir


1

O zamandan beri hiçbir şey benim için işe yaramıyor. Bir araya getirilen diğer cevaplara göre küçük bir pencere BATCH betiği oluşturuyorum. Umarım birine yardımcı olur. Basitçe kullanım: backupDatabase <PaketAdı> <UygulamaAdı> [HedefDirectory]. Sergei'nin yedekleme yöntemini ve Android Backup Extractor'ı kullanır .

@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

sqlite dosyasını cihazınızdan kolayca çıkarabilirsiniz (root gerekli değildir)

  1. SDK Klasörüne git
  2. cd platform araçları
  3. adb'yi başlat

    cd / sdk / platform-tools ./adb shell

    Ardından terminalde aşağıdaki komutu yazın

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

    Örneğin

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


1

Bunu android 6'da yapmaya çalışıyorsanız izin isteyin ve bu sorunun cevabının kodunu kullanın

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; 
} 

Bir kez verildiğinde

@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();
        } 
    } 
} 


1

Mac'te (kök gerekmez)

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

Platform araçları klasöründeki sqlite dosyasını kopyalayacaktır.


Bu, yalnızca uygulama hata ayıklama için derlenmişse işe yarıyor gibi görünüyor.
David Berry

@DavidBerry Evet, hata ayıklama için derlenmişse db'yi çekecektir, aksi takdirde herhangi bir uygulamanın db'sini çekmiş olabilirsiniz. Ve uygulamanın ciddi bir güvenlik sorunu olacak. :)
Yogesh Suthar

0
 > is it possible to pull in any way a database of an Android device without having to root it? 

evet, android uygulamanız veritabanının herkes tarafından erişilebilen bir dosya kopyasını oluşturuyorsa.

android, uygulamaların özel verilerini korur, böylece diğer uygulamalar tarafından görülemez / erişilemez. bir veritabanı özel veridir. Uygulamanız elbette veritabanı dosyasını okuyabilir, böylece herkese açık bir dosyaya bir dosya kopyası yapabilir.


0

Köklü bir cihazda şunları yapabilirsiniz:

// 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

Ben% 100 eminim ama sanırım çekme ihtiyaç oluşmadan önce> su ve vermek izni
pavol.franek

0

Lam Vinh tarafından verilen cevaba göre, işte benim için 1. nesil Nexus 7'de çalışan basit bir toplu iş dosyası. Kullanıcıdan paket adını ve ardından veritabanı adını (.sqlite uzantısı olmadan) girmesini ister ve koyar c: \ temp. Bu, ortam değişkenlerinde Android sdk ayarınızın olduğunu varsayar.

@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

Android 4.0 veya üzerindeyseniz ve bir Mac kullanıyorsanız , işte uygulama içeriklerinizi masaüstüne kaydedecek bir yakut betiği. Test etmemiş olsam da bunun Ubuntu'da da işe yarayacağını düşünürdüm.

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 -`

koşmak -> ruby ​​your_ruby_file_name.rb

Bu komut dosyası yalnızca "mutlu yoldur", bu nedenle lütfen cihazınızın bağlı olduğundan ve adb'nin profilinize eklendiğinden emin olun.


0

Uygulama veritabanını dahili depolamaya / depolama alanından (adb içeren PC'ye değil) "kaydetmek" ve "geri yüklemek" için eksiksiz bir çözüm sunuyorum.

Veritabanını kaydetmek ve diğerini geri yüklemek için iki yöntem yaptım. MainActivity'de onCreate () öğesinin sonunda bu yöntemleri kullanın (veritabanını kaydetmek veya geri yüklemek istiyorsanız biri veya diğeri).

veritabanını dahili depolamaya kaydet:

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");
        }
    }

veritabanını dahili depolamadan geri yükleyin:

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

İşlerin otomatik olması her zaman daha iyidir.Bu yüzden basit bir python betiği yazdım ADB kullanarak cihazdan db dosyasını kopyalamak için . Sık sık yapıyorsanız, geliştirme süresinden çok fazla tasarruf sağlar.

Cihaz köklü değilse, yalnızca hata ayıklama yapılabilen uygulamalarla çalışır .

İşte özün bağlantısı.

Şu şekilde çalıştırın: 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")

-1

Veritabanı dosyanızı istiyorsanız

DDMS'ye bakın> Dosya keşfetme

db dosyanızı paket adınızdan bulun

daha sonra cihazdan bir dosya çekmeye tıklayın (yalnızca köklü cihaz)


3
bu yapılabilir ancak köklü bir cihazda, sorumun amacı, köklü olmayan bir cihazda nasıl yapılır
DeX03

1
bu köklü olmayan bir cihazda çalışmaz. Cevabınız bunu belirtmelidir.
tony9099
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.