當前位置:首頁 » 安卓系統 » android42源碼

android42源碼

發布時間: 2022-09-25 13:09:42

Ⅰ 怎樣查看 Android APP 源代碼

壓縮軟體打開apk文件,解壓出根目錄中的classes.dex文件

使用cmd ,dex2jar.bat classes.dex命令將classes.dex轉換為jar

再用jd-gui打開該jar就可以查看源碼了,如果apk安全性好的話,有些代碼是看不到的

Ⅱ 如何使用VirtualBox的安裝Android 4.4奇巧在Windows

按照下面的方法開打終端命令行工具或者使用快捷鍵:Ctrl + Alt + T

應用程序-----附件----終端

這里先新建一個文件夾名稱為 android4.4 ,用來保存Android下載源代碼
在終端中輸入並執行下面的命令來新建 android4.4 文件夾:
mkdir android4.4

之後用下面的命令進入到android4.4文件夾中
cd android4.4

之前小編有講述過下載repo工具,當時小編是保存在終端工具打開的默認位置即宿主目錄,為了方便使用repo工具,使用下面的命令將它到源碼下載的目錄中來:
cp /home/xyh666168/repo ./

cp ../repo ./

說明:
../ 表示上一級目錄
./ 表示當前目錄

下面的4、5、6步主要講述初始化android源碼,這個初始化簡單的說就是:下載一些關於源代碼的配置文件,之後按照這個配置文件來下載Android源代碼

目前關於Android最新的分支代碼是:android-4.4_r1
可以使用下面的命令來初始化最新android 源代碼
./repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1
輸入上面的命令後回車執行

因為各種網路方面的原因,可能執行上面點初始化命令會失敗,提示一些類似網路連接失敗的信息,那麼不用理會,繼續執行上面的初始化命令,若是很多次都都提示失敗,那麼可以做用以下方法來嘗試:
1、使用命令:rm -rf * -R 刪除android 4.4文件中的緩存文件,然後重新執行初始化命令
2、隔一段時間或者晚上特別是凌晨的時候下載初始化,一般這個時候網路環境容易下載Android 源代碼
3、可能是寬頻運行商對Android源代碼下載網站都控制,嘗試讓它們打開,不行就考慮更換網路寬頻或者換個不同的寬頻下載

若是看到類似下面的信息,表示連接成功,正在初始化

根據網路的速度,初始化的時間也不同,正常網路情況下,2分鍾之內就可以完成初始化,完成初始化後,可以看到如下面的提示信息:

repo has been initialized in ......

這個信息表示初始化成功,下面就可以開始同步下載源代碼了

輸入並執行下面的命令開始執行源代碼的同步下載
./repo sync

同樣,若是因為網路原因,下載過程自動中斷,那麼繼續使用這個命令,直到源代碼下載完

若是看到類似下面的信息不停的滾動或者一些數字閃爍,那麼表示源代碼正在下載,請耐心等待

下載的過程中,可能會看到類似紅色方便標示的信息而發生中斷,停止下載,那麼可以繼續使用./repo sync命令來下載,源代碼的下載過程普通網路可能要數個甚至十幾個小時,為了防止中斷停止下載,那麼最好使用一個自動恢復下載的腳本來下載源代碼,請參考小編關於「Android 4.3源碼的下載和編譯環境的安裝及編譯」或者「Android 4.4 源碼下載之下載環境准備」中介紹的方法

最後源碼下載完後,提示信息如打紅色方框所示,checking out files 表示從「臨時文件」中導出源碼

「臨時文件」 .repo14775M
「臨時文件」 .repo和導出的源碼一共24335M(23G)

下載過程中若不知道下載了多少,可以在源碼目錄使用命令: -sh 或 -sm 來查看已經下載了多少,然後和小編這里的對比,這樣就能夠計算還需要多久可以下載完

其它一些事項說明:

1、在源代碼下載過程中,在源代碼下載目錄看不到任何文件,打開「顯示隱藏」,會看到一個名為.repo的文件夾,這個文件夾是用來保存Android源代碼的「臨時文件」

2、文件最後下載接近完成時,會從.repo文件夾中導出Android源代碼

3、Android源代碼下載完成後,可以看到Android源代碼下載目錄中會有
bionic、bootable、build、cts、dalvik......這些文件夾,這些就是Android源代碼

4、若是必須關閉電腦停止下載,那麼可以在源代碼下載的終端中按Ctrl + C 或者 Ctrl + Z 停止源代碼的下載,不會造成源代碼的丟失或損壞

5、自動或者手動停止源代碼的下載,可以使用命令: repo sync 繼續下載

Ⅲ 如何查看Android源碼

當我們在eclipse中開發android程序的時候,往往需要看源代碼(可能是出於好奇,可能是讀源碼習慣),那麼如何查看Android源代碼呢?

比如下面這種情況

假設我們想參看Activity類的源代碼,按著Ctrl鍵,左擊它,現實的結果卻看不到代碼的,提示的信息便是「找不到Activity.class文件」。

此時點擊下面的按鈕,「Change Attached Source…」,選擇android源代碼所在位置,便彈出圖三的對話框。

第一種是選擇工作目錄,即已經存在的android應用程序源代碼。

第二種分兩種方式

(1)選擇External File…按鈕,添加Jar格式文件或者zip格式文件路徑;

(2)選擇External Floder…按鈕,添加文件夾所在路徑。

下面問題就來了,源代碼在哪裡?不能憑空產生阿。

可以通過Android SDK Manager進行源代碼下載;(推薦該種方法),如圖四

勾選Source for Android SDK,進行下載即可。

此外也可通過其他途徑下載,網上有很多共享的資源。

這里選擇第二種方式的(2)方法,選擇源碼所在目錄(即圖四下載源代碼目錄所在路徑),如圖五

點擊「OK」按鈕,此時,Activity文件便能夠查看源代碼了,如圖六。

這樣就大功告成了!!!

Ⅳ 如何在Android源碼里查找java中native方法對應的C++實現

android源碼只包含android app java的客戶端代碼。
native部分可能有可能沒有,先全局搜索.c或者.cpp文件,有這些文件才可能有。
如果是標準的android native support 工程,那麼eclipse裡面打開之後,在工程目錄/jni下面就是 native的C++代碼。
Android源碼中很多關鍵代碼都是C++實現的,java通過jni來調用,經常會看到java中這樣的代碼:
static native Thread currentThread();

如何根據方法名找到其對應的C++實現,有兩個方法。
先來個java代碼的示例VMThread.java:

package java.lang;

class VMThread {
Thread thread;
int vmData;

VMThread(Thread t) {
thread = t;
}

native static void create(Thread t, long stackSize);

static native Thread currentThread();
static native boolean interrupted();
static native void sleep (long msec, int nsec) throws InterruptedException;
static native void yield();

native void interrupt();

native boolean isInterrupted();

......
}

我們要查找currentThread方法的實現。
方法一:
由於Android源碼中對每個native實現都會寫一個java方法名和C++方法名映射的列表,所以我們直接搜索這個列表內容即可。
zkw@zkw $ grep -rns '"currentThread"' ./*
./art/compiler/dex/quick/dex_file_method_inliner.cc:108: "currentThread", // kNameCacheCurrentThread
匹配到二進制文件 ./dalvik/vm/native/.java_lang_VMThread.cpp.swp
./dalvik/vm/native/java_lang_VMThread.cpp:241: { "currentThread", "()Ljava/lang/Thread;",
./external/android-mock/tests/com/google/android/testing/mocking/AndroidMockGeneratorTest.java:249: Method method = Thread.class.getMethod("currentThread");
./external/android-mock/tests/com/google/android/testing/mocking/AndroidMockGeneratorTest.java:407: Method method = Thread.class.getMethod("currentThread");

可以看到,在文件./dalvik/vm/native/java_lang_VMThread.cpp中找到currentThread方法相關的信息,後面()Ljava/lang/Thread代表這個方法的返回值。
進入java_lang_VMThread.cpp這個文件可以看到:

17 /*
18 * java.lang.VMThread
19 */
20 #include "Dalvik.h"
21 #include "native/InternalNativePriv.h"
22
23
24 /*
25 * static void create(Thread t, long stacksize)
26 *
27 * This is eventually called as a result of Thread.start().
28 *
29 * Throws an exception on failure.
30 */
31 static void Dalvik_java_lang_VMThread_create(const u4* args, JValue* pResult)
32 {
33 Object* threadObj = (Object*) args[0];
34 s8 stackSize = GET_ARG_LONG(args, 1);
35
36 /* ing collector will pin threadObj for us since it was an argument */
37 dvmCreateInterpThread(threadObj, (int) stackSize);
38 RETURN_VOID();
39 }
40
41 /*
42 * static Thread currentThread()
43 */
44 static void Dalvik_java_lang_VMThread_currentThread(const u4* args,
45 JValue* pResult)
46 {
47 UNUSED_PARAMETER(args);
48
49 RETURN_PTR(dvmThreadSelf()->threadObj);
50 }
51

......
237
238 const DalvikNativeMethod dvm_java_lang_VMThread[] = {
239 { "create", "(Ljava/lang/Thread;J)V",
240 Dalvik_java_lang_VMThread_create },
241 { "currentThread", "()Ljava/lang/Thread;",
242 Dalvik_java_lang_VMThread_currentThread },
243 { "getStatus", "()I",
244 Dalvik_java_lang_VMThread_getStatus },
245 { "holdsLock", "(Ljava/lang/Object;)Z",
246 Dalvik_java_lang_VMThread_holdsLock },
247 { "interrupt", "()V",
248 Dalvik_java_lang_VMThread_interrupt },
249 { "interrupted", "()Z",
250 Dalvik_java_lang_VMThread_interrupted },
251 { "isInterrupted", "()Z",
252 Dalvik_java_lang_VMThread_isInterrupted },
253 { "nameChanged", "(Ljava/lang/String;)V",
254 Dalvik_java_lang_VMThread_nameChanged },
255 { "setPriority", "(I)V",
256 Dalvik_java_lang_VMThread_setPriority },
257 { "sleep", "(JI)V",
258 Dalvik_java_lang_VMThread_sleep },
259 { "yield", "()V",
260 Dalvik_java_lang_VMThread_yield },
261 { NULL, NULL, NULL },
262 };

源碼中第242行找到對應的名字,用紅色標出,其實現就在第44行。
這個方法不是很准確,要靠經驗來判斷搜出來的代碼是否是自己要找的,下一個方法可以較准確的查找。
方法二:
還是找VMThread.java的currentThread函數,找多了會發現,C++的名字一般都是包名+類名+方法名,比如currentThread的C++名字就肯定包含「java_lang_VMThread_currentThread」,所以直接搜索即可。
如何在Android源碼里查找Java中native方法對應的C++參考:http://e.51cto.com/course/course_id-4377.html

Ⅳ 怎麼在windows下查看android源碼

先下載源碼,最新為2.2

2.找SDK目錄

安裝的SDK到我的目錄E:\

E:\android-sdk-windows\

找到目錄 結構如下:

E:\android-sdk-windows\

-platforms

+android-3(android-1.5)

+android-4(android-1.6)

………..

+android-6(android-2.0)

+android-7(android-2.1)

+android-8(android-2.2)

最高的android-8對應的是SDK2.2。

在android-8文件中新建sources然後把下載好的源碼(android-2.2-froyo-src.zip)解壓到這個文件下。

3.改配置文件(修改紅色部分)

找到android-8目錄下的文件source.properties並將其修改如下:

### Android Tool: Source of this archive.
#Wed Oct 13 14:00:16 CST 2010
Pkg.Desc=Android SDK Platform. 2.2_r1
Pkg.UserSrc=true
Archive.Arch=ANY
Platform.Version=2.2
Pkg.DescUrl=sources
Archive.Os=WINDOWS
Pkg.SourceUrl=sources
Pkg.Revision=2
AndroidVersion.ApiLevel=8

大公告成,重啟Eclipse,按ctril+關鍵字、類名 或者按F3就可以點進去了,可以看到源碼了吧!

PS:已經下載好的源碼,可以把core目錄放入到sources中即可。。。

Ⅵ Android源碼和sdk源碼有什麼差別

但是,這個sdk源碼為何能跑得起來?它也是依賴完整的android系統的。android系統源碼是基於linux內核上的一套解決方案,針對ARM平台的做的各種適合嵌入式設備的一套代碼。舉個例子,你如果在windows上編程,用到它的系統api,這些api存在於一些dll中,這個dll就是你的開發所需的東東,類似android sdk,而這個dll之所以能跑起來,完全也是依賴windows系統的,windows系統源碼有幾千萬行代碼,android系統源碼也不會少。

Ⅶ windows下如何編譯android源碼

如果沒記錯,windows下是沒法編譯android框架源代碼的

因為android是基於linux平台的,因此底層的很多東西都是基於linux系統的

如果只是單純的android應用程序,則可以在windows下開發編譯

只需要用Eclipse的adt插件加上windows下開發的Android SDK就行了。

Ⅷ 如何在32位ubuntu11.10 下編譯android 4.0.1源碼和goldfish內核

一準備工作

1安裝javasdk6
(1)從jdk官方網站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下載jdk-6u29-linux-i586.bin文件。
(2)執行jdk安裝文件

[html] view plain
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin

(3)配置jdk環境變數

[html] view plain
$sudo vim /etc/profile
[html] view plain
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存後退出編輯,並重啟系統。
2安裝依賴包

[html] view plain
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils

3用repo工具下載源碼
(1)初始化repo

[html] view plain
$cd ~
$mkdir bin
$curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(導出環境變數)

(2)下載android最新源碼

[html] view plain
$mkdir android
$cd android
$ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
...(輸入用戶名和郵箱名)
$repo sync -j5
...(此處用5個線程開始下載源碼,下載過程及其漫長,需要耐心等待)

二 編譯源碼
1開始編譯

[html] view plain
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh

includingdevice/samsung/tuna/vendorsetup.sh

includingdevice/ti/panda/vendorsetup.sh

includingsdk/bash_completion/adb.bash

$make-j4(此處用4個線程編譯)

編譯完成後,會看到類似的輸出:

[html] view plain
Targetramdisk:out/target/proct/generic/ramdisk.img
Targetuserdatafsimage:out/target/proct/generic/userdata.img
Installedfilelist:out/target/proct/generic/installed-files.txt

2編譯遇到的問題
編譯錯誤:

[html] view plain
<命令行>:0:0:錯誤:「_FORTIFY_SOURCE」重定義[-Werror]

<built-in>:0:0:附註: 這是先前定義的位置

cc1plus:所有的警告都被當作是錯誤

make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]錯誤 1

原因:
因機器上的gcc版本過高,需替換成4.4.6重新進行編譯。
解決方法:
1)安裝4.4版本的gcc和g++

[html] view plain
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4

2)設置gcc版本,使gcc鏈接到gcc-4.4

[html] view plain
$ ls -l /usr/bin/gcc*

lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6

$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc

3)設置g++版本,使g++鏈接到g++-4.4

[html] view plain
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++

4)設置完畢後,重新進行編譯即可

3從模擬器啟動編譯後的鏡像文件
1)設置環境變數:

[html] view plain
export PATH=~/android/out/host/linux-x86/bin:$PATH

export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic

其中linux-x86/bin存放模擬器emulator工具,proct/generic存在編譯後的鏡像文件。

2)啟動模擬器

[html] view plain
$emulator

emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)

啟動後的截圖:

三 編譯androidgoldfish內核
1)進入android4.0.1源碼目錄,下載goldfish內核源碼

[html] view plain
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)

master

remotes/origin/HEAD -> origin/master

remotes/origin/android-goldfish-2.6.29

remotes/origin/master

$ git checkout remotes/origin/android-goldfish-2.6.29

2)修改Makefile

[html] view plain
goldfish$ gedit Makefile

修改

[html] view plain
ARCH ?=$(SUBARCH)
CROSS_COMPILE ?=



[html] view plain
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-

3)導出交叉編譯器目錄為環境變數
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

4)編譯內核

[html] view plain
goldfish$ make goldfish_armv7_defconfig

goldfish$ make

編譯完成後,可看到類似如下的輸出:

[html] view plain
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

5)從模擬器中啟動內核鏡像

[html] view plain
$emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &

啟動模擬器後,可從Settings->System->AboutPhone中查看內核版本信息。

Ⅸ android源碼在哪個文件夾下

android的源碼首先需要你從Android SDK Manager裡面下載,然後在你的sdk中才看得到。


  • 如下圖,找到對應的source for Android sdk項,選中然後下載:

Ⅹ 怎麼使用Android源碼編譯c模塊生成可執行文件

1. 在./development目錄下創建一目錄 如:myhello
2. 進入hello目錄,在其下編寫自己的.c文件,如: myhello.c
#include <stdio.h>
int main()
{
printf("hello world\n");
exit(0);
//return 0;
}
3. 在hello目錄中,編寫Android.mk, 內容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myhelloworld
LOCAL_SRC_FILES := myhello.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
4. 回到Android源代碼頂層目錄,進行編譯,make myhelloworld
5. 生成的可執行文件位於:out/target/proct/lotus/system/bin/ 目錄下
6. adb push 到手機 /data 目錄下,然後進入adb shell,到data目錄下,執行./myhelloworld 皆可

手動編譯連接【arm-eabi-gcc 的目錄隨andorid的版本而有變化,還有就是需要鏈接的文件如果比較多時,需要很多-l 就很麻煩了】
7、編譯成目標文件:
#$(yourAndroid)/prebuilt/linux-x86/toolchain/[arm-eabi-4.2.1]/bin/arm-eabi-gcc -I bionic/libc/arch-arm/include/ -I bionic/libc/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -g -c helloworld.c -o hello.o
8、生成可執行代碼:
#$(yourAndroid)/prebuilt/linux-x86/toolchain/[arm-eabi-4.2.1]/bin/arm-eabi-gcc -nostdlib -Bdynamic -Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,noreloc -o helloworld -Lout/target/proct/[generic]/obj/lib -Wl,-rpath-link=out/target/proct/[generic]/obj/lib -lc hello.o -entry=main

其中[ ]中部分根據實際情況修改

**************************************************
實驗:
1. 建目錄(my Android)/development/test, 在該目錄下新建 Android.mk和fb_test.c文件

2. Android.mk文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myfbtest
LOCAL_SRC_FILES := fb_test.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

3. 以下為fb_test.c
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <linux/kd.h>

#include <stdio.h>

#define FBBIT_PER_PIXEL 32
#define FBBIT_PIXEL_IMAGE 16
#define PIXELS_WIDTH_BYTE 4
#define BYTE_PER_PIXEL 3
#define FB_GRAPHICS_PATH "/dev/graphics/fb0"
#define DEV_TTY0_PATH "/dev/tty0"

#define DISPLAY_ERROR -1
#define DISPLAY_SUCCESS 0

#define GET_BATTERYCAPACITY_ERR -1

#define MAX_STR 255

static struct {
int fd;
void *pixels;
struct fb_fix_screeninfo fixed;
struct fb_var_screeninfo var;
int align_xres;
} fb;

int getBatteryCapacity(void)
{
FILE *in;
char tmpStr[MAX_STR + 1];
char capfile[] = "/sys/class/power_supply/battery/capacity";

if (capfile == NULL)
return GET_BATTERYCAPACITY_ERR;

in = fopen(capfile, "rt");
if (in == NULL)
return GET_BATTERYCAPACITY_ERR;

if (fgets(tmpStr, MAX_STR, in) == NULL) {
printf("Failed to read battery capacity!\n");
fclose(in);
return GET_BATTERYCAPACITY_ERR;

}

printf("Battery capacity(ascii): %s\n", tmpStr);
fclose(in);

return 0;//atoi(tmpStr);
}

static int vt_set_graphicsmode(int graphics)
{
int fd, r;
fd = open(DEV_TTY0_PATH, O_RDWR | O_SYNC);
if (fd < 0)
return DISPLAY_ERROR;
r = ioctl(fd, KDSETMODE, graphics);
close(fd);
return r;
}

int display_init(void)
{
fb.fd = open(FB_GRAPHICS_PATH, O_RDWR);
if (fb.fd < 0)
return DISPLAY_ERROR;

if (ioctl(fb.fd, FBIOGET_FSCREENINFO, &fb.fixed) < 0)
return DISPLAY_ERROR;
if (ioctl(fb.fd, FBIOGET_VSCREENINFO, &fb.var) < 0)
return DISPLAY_ERROR;
fb.align_xres = fb.fixed.line_length /
(fb.var.bits_per_pixel >> BYTE_PER_PIXEL);

fb.pixels = mmap(0, fb.fixed.line_length * fb.var.yres_virtual,
PROT_READ | PROT_WRITE, MAP_SHARED, fb.fd, 0);
if (fb.pixels == MAP_FAILED)
return DISPLAY_ERROR;

vt_set_graphicsmode(KD_GRAPHICS);

memset(fb.pixels, 0, fb.fixed.line_length * fb.var.yres_virtual);
//display_update(fb.pixels, fb.align_xres, fb.var.yres);
fb.var.activate = FB_ACTIVATE_FORCE;
ioctl(fb.fd, FBIOPUT_VSCREENINFO, &fb.var);

printf("display_init ok\n");

return DISPLAY_SUCCESS;
}

void display_on(void)
{
ioctl(fb.fd, FBIOBLANK, FB_BLANK_UNBLANK);
}

void display_off(void)
{
ioctl(fb.fd, FBIOBLANK, FB_BLANK_POWERDOWN);
}

int main()
{
display_init();
display_off();//關顯示屏

getBatteryCapacity();
sleep(5);

display_on();//開顯示屏

return 0;
}

熱點內容
php批量查詢 發布:2025-01-16 10:43:38 瀏覽:917
適合搭建代理伺服器的雲 發布:2025-01-16 10:42:49 瀏覽:428
我的世界手機版伺服器怎麼注冊 發布:2025-01-16 10:41:30 瀏覽:614
小米雲電視伺服器 發布:2025-01-16 10:37:03 瀏覽:350
php開源wiki 發布:2025-01-16 10:27:19 瀏覽:189
sql加欄位備注 發布:2025-01-16 10:21:49 瀏覽:565
線割編程教程 發布:2025-01-16 10:21:03 瀏覽:18
谷歌瀏覽器緩存刪除 發布:2025-01-16 10:19:36 瀏覽:414
資料庫txt 發布:2025-01-16 10:16:41 瀏覽:457
小米賬號王者傳奇腳本掛機 發布:2025-01-16 10:07:25 瀏覽:917