当前位置: 首页 > news >正文

收图片的网站seo平台有哪些

收图片的网站,seo平台有哪些,图片网站怎么做排名,做网站的素材和步骤关于 调用 JNI JAR 的说明和注意事项#xff0c;调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2017.10.18 (* ************************************************ *) (*                         *) (*                  …关于 调用 JNI JAR 的说明和注意事项调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2017.10.18 (* ************************************************ *) (*                         *) (*                         *) (*  设计爱吃猪头肉 Flying Wang 2015-04-15   *) (*      上面的版权声明请不要移除。      *) (*                         *) (* ************************************************ *) 本人所在的群① FireMonkey[移动开发]  165232328 对于安卓系统 谷歌 API 提供的是 JNI 接口。 第三方 JAR SDK 提供的也是 JNI 接口。 您的手机一般会内置 安卓 SDK 的大部分接口。 但是有些 API 可能没有内置。 FMX 安卓工程默认会给您提供多个 谷歌的 SDK 。 因此 大部分 谷歌的 JAR您都不需要自己去找。 对于 第三方的 SDK 来说。 基本上分为 jar so、纯jar 和 纯so 三种。 纯so 就是类似于 dll 的接口。只需要注意 dll 是 stdcall 类型其他所有平台都是 cdecl 类型。 不写是不行的。因为 delphi 不写的是默认的 pascall 类型。 如果你不会调用 dll 那么也就不会调用 so 。 本文不讨论调用 so。 但是告诉你们 SO 文件文件的路径编辑 RemotePath 列。路径是(xe5) library\lib\armeabi   (xe6或以上) library\lib\armeabi-v7a 以上路径的 so 一般是给 jar 加载用的。 自己加载可以用 LoadLibaray 或者 dlopen 。记得用对应的 FreeLibaray 和 dlclose 也可以像定义 DLL 一样定义 so 的函数接口。这样就不用写代码加载了。 如果只有你自己用也可以发布到其他你能访问的路径。但是只能写代码加载了路径要写完整。 armeabi-v7a 是 arm32 的如果你需要支持 64bit 除了这个目录还需要 arm64-v8a。 64bit 下凡是需要用到 so 的这两个目录都需要放对应的 so。 对于 jar 无论它有没有提供 so 。我们都只能使用 jar 的对外接口。 除非是安卓基本 API或者是 DELPHI 已经提供的 JAR 。否则 其他的 JAR 只要你用到了就必须加入到 安卓的 工程中。 具体如何添加请自行百度。 即便是 基本 APIEMBT 也没有全部给大家 转成 JNI 接口。 所以当你用到一个 EMBT 没翻译的 API 的时候请自行用 工具 翻译。 翻译可以理解为 语言的转换接口的导出也就是变成 pascal语法的 pas 文件 当你得到一个 JAR 的时候请用工具翻译成 pascal 文件。 目前推荐 2 个 工具。 1. 官方的 java2op.exe 。支持 .jar .java .class 三种格式的文件。 2. 爱吃猪头肉的 JarOrClass2pas 。支持 .jar .class 两种格式的文件。 其他工具都是垃圾。千万别用。否则活该。 当你用工具得到 pas 文件后注意 1. 一般会得到 大量的 无用的错乱的重复的 接口。请将它们删除。 2. 即便是没问题的接口如果用不到也请删除。 3. 转换工具会写出一些 uses 的单元这些单元可能不存在。 对于jar 或 class 文件引用了别的 jar就容易出现不认识的 unit 的 uses。请找到这些 jar 继续翻译。 当你 jar 已经加入到 安卓项目中。 jni pas 文件已经准备好也加入到 安卓项目中。 就可以开始调用 jar 接口了。 接下来说明下基本的类型变化。 Int 就是 Integer 很多基本对象大家都可以自己想到。 string 是 JString 。 Uri 要翻译成 Jnet_Uri。 上述两个类型 EMBT 提供了互相转换的函数。 还有个别的其他改变名称的类型。这里就无法一一列举了。如果 你发现一些 类名 EMBT 应该提供了但是找不到请通过 Signatur 在 Find in Files 对话框中查找。 例如 搜索 java/lang/Class 可以发现 JCalss 也改名了。 int [] 就是 TJavaArrayInteger 基本类型用 TJavaArray。 但是 string [] 是 TJavaObjectArrayJString对象类型的一般都用 TJavaObjectArray。 ArrayListString 要翻译成 JArrayList 而且任何 ArrayListPendingIntent 也就是 ArrayList某对象 都要翻译成 JArrayList。 有些类型的名称比较特别。例如 java 的 Phone 类型 EMBT 已经翻译成了 JCommonDataKinds_Phone。这是因为 Phone 是 CommonDataKinds 的内部类。 数据类型 OK 了。那么就谈谈 Java 类的 构造函数 类成员 类方法 和 普通成员 普通方法。 如果不懂这些请自行百度。建议好好看看 面向对象开发 课程。 Java 类一般会提供默认构造函数到了 pas 里头他的函数名叫 init 小写。默认不带参数。 但是很多 java 类 会重载 构造函数提供带参数的版本。 接下来我们需要百度下你打算使用的 jni 的 demo 。 安卓开发最大的优势就是网上全是 demo 虽然是 java 语言的。 找到 demo 代码之后你就需要 按照 代码的逻辑进行语言的翻译。 下面提供几种常见的 代码 翻译。 关键内容请回复。 本帖隐藏的内容 1 某对象的 构造。 1.1 java 代码   xxx x new xxx(参数或没有参数); 1.2 翻译代码 var   x: Jxxx; begin   x : TJxxx.JavaClass.init(参数或没有参数);   if x nil then 出错了。 end; 上述代码演示了构造函数的使用。 注意 1.3 x 是 Jxxx 1.4 TJxxx.JavaClass 是 TJ 开头的。JavaClass. 能提供给你 这个类的所有类方法类成员包括构造函数。 1.5 不是所有类都可以使用默认构造函数的。 1.6 如果你确认可以使用默认构造函数但是 pas 中没有。可以使用如下代码构造。   x : TJxxx.Create; 2. 某对象的 非默认构造使用类方法的构造。 2.1 java 代码 通过 new 创建对象。   xxx x new xxx.yyy(参数或没有参数); 2.2 java 代码 不通过 New 创建对象。   xxx x xxx.yyy(参数或没有参数); 2.3 翻译代码 var   x: Jxxx; begin   x : TJxxx.JavaClass.yyy(参数或没有参数);   if x nil then 出错了。 end; 上述代码演示了使用类方法来得到类 xxx 的对象。 3. 通过其他类的对象来得到对象 x。 3.1 java 代码   xxx x yyy.zzz(参数或没有参数); 3.2 翻译代码 var   x: Jxxx; begin   x : yyy.zzz(参数或没有参数);   if x nil then 出错了。 end; 非常简单就是加了个冒号。yyy 是另一个对象。 zzz 可以是 yyy 对象的类方法、类成员、普通方法或普通成员。 4. 通过强制类型转换来得到对象 x一般不常用。 4.1 java 代码   xxx x (xxx)yyy.zzz(参数或没有参数);   zzz 返回的类型不是 xxx也不是 xxx 的派生类。 4.2 翻译代码 var   xLocalObject: JObject;   x: Jxxx; begin   xLocalObject : yyy.zzz(参数或没有参数);   或者   xLocalObject : JObject(yyy.zzz(参数或没有参数)); if xLocalObject nil then 出错了。   x : TJxxx.Wrap((Obj as ILocalObject).GetObjectID);   if x nil then 出错了。 end; 注意 Wrap 的开头也是 TJ 经过 [臺北]wildsky(2590003092) 的验证 x : TJxxx.Wrap((yyy.zzz(参数或没有参数) as ILocalObject).GetObjectID); 这样少一个变量的写法。部分机器发生闪退。 用两个变量来完成就不会发生闪退我个人觉得这个肯定不是问题的原因下面才是。 对于某些 JNI 服务 经过 [深圳]机器猫(5909386)  的验证 TJContext.JavaClass.VIBRATOR_SERVICE TJActivity.JavaClass.VIBRATOR_SERVICE 用上面个可以下面的就会闪退。 出现的错误提示可能是Project xxx.apk raised exception class Aborted(6). J 开头 TJ 开头 都是 约定俗成。你也可以 SB 开头 TSB 开头。 默认 TJ 开头的是 DELPHI 的类型。 J 开头的才是 JAVA 的类型。 TJxxx.JavaClass 返回 JxxxClass 类型这个类型专门代表类方法和类属性。 Jxxx 则代表类对象的类型。 5. 不通过变量来操作某类型 xxx 的代码。 5.1 java 代码   xxx.yyy(参数或没有参数).zzz(参数或没有参数); 5.2 翻译代码   TJxxx.JavaClass.yyy(参数或没有参数).zzz(参数或没有参数); 5.3 xxx 是类型 yyy 是类函数。 5.4 可以出现 xxx.JavaClass.yyy(参数或没有参数).zzz(参数或没有参数).nnn(参数或没有参数); 这种多级的调用。 6. 已存在对象 xxx 调用他的方法来操作的代码。 6.1 java 代码   xxx.yyy(参数或没有参数); 6.2 翻译代码 xxx.yyy(参数或没有参数); 6.3 xxx 是对象 yyy 是该对象的类函数或成员函数。 6.4 可以出现 xxx.yyy(参数或没有参数).zzz(参数或没有参数); 这种多级的调用。 7. 使用常量 7.1 java 中的常量一般都是类的成员。而且一般是类的类成员。 7.2 java 代码   xxx yyy.zzz;   //xxx 是一个变量 yyy 是一个类名 zzz 是常量名 7.3 翻译代码   xxx : TJyyy.JavaClass.zzz; 7.4 也就是说 zzz 被翻译到了 Jyyy 的 Class 版本的 接口中。 7.4 效果等于   xxx : JyyyClass.zzz; 7.5 不建议用上面的代码。请按 7.3 的版本写。 注意对于我们 pascal 来说没有参数括号是可以省略的。 C JAVA 等是不允许省略的。 对于 数组 TJavaArrayXXXX 如果你特别想自己建立对象。 可以写 var xxx: TJavaArrayXXXX; begin   xxx : TJavaArrayXXXX.Create(个数);   然后用 xxx.Items[编号] 来访问。 end; TJavaObjectArray 也是如上的办法。 目前没有发现动态修改数量的办法。也就是数组的个数是建立的时候就确定的。 8. 一些常用的 Jni 和 pascal 类型的互转 打开 unit Androidapi.Helpers; 自己去看吧。 有 TBytes string  JCharSequence JURI JLong 等几种常用类型的互转。 如果你使用一个方法发生Segmentation fault(11) 可能是对象为 nil 或者 函数不存在一般是版本不同有的版本函数就不存在。 如果你使用一个方法发生非法操作说明没有这个方法大概是名称或参数有错误。 如果提示你 java class xxx could not be found如果是官方 xxx 那么是你的手机内部没提供这个接口你可以自己找官方的 jar 文件来加入、 如果是第三方的 xxx那更简单了这个 xxx 对应的 jar 文件你肯定没加入到 你的工程中。 如果你确认你加了(参考 第二个箭头确认加了就删了再加一遍还不行可能是你编译出的结果目录存在垃圾删除编译结果目录试试。)建议做如下操作 打开你的 Android 工程点菜单项 Project—Deployment打开部署子窗口点 Revert to Default 按钮就是那个向左的弯箭头 出现 Revert to default 对话框 选中第一项“Revert for all configurationsthe active platform”点 OK。 注意不论其默认选项如何在这里都必须选择其中一个并点OK否则你的Android程序在调用JAR文件时将会出现“Java Class xxx could not befound”的错误。 以上文字来源于 http://blog.sina.com.cn/s/blog_648d306d0102vfgq.html 如果 Objs 是 TJavaObjectArrayJxxxx 的 Objs.Items[x] 或者 Objs[x] 发生错误Segmentation fault(11)那么就是不能这样用改用 TJxxxx.Warp(Objs.GetRawItem(x)) 试试。多谢 [深圳]机器猫(5909386)  的测试。 一般建议 uses {$IF CompilerVersion 27.0} // XE6   Androidapi.Helpers, {$ENDIF}   FMX.Helpers.Android,   Androidapi.JNI.JavaTypes,   Androidapi.NativeActivity; 关键内容请回复。 本帖隐藏的内容 当需要一个 Activity 对象的时候我们只能提供 TAndroidHelper.Activity。因为 FMX 只存在这个一个 Activity。java UI 代码中 self(this) 就是 Activity 对象。 当需要一个 View 对象的时候默认的是 TAndroidHelper.Activity.getWindow.getDecorView。其他的就不知道了。 当需要一个 Context 对象的时候可以试试 TAndroidHelper.Context这是全局的。 当你需要一个 getApplicationContext 对象的时候可以试试 TAndroidHelper.Context.getApplicationContext这是因为你不懂自己看源码不是我的错。 {$IF CompilerVersion 30.0} // RAD10     TAndroidHelper.Activity     TAndroidHelper.Context {$ELSE}     SharedActivity     SharedActivityContext {$ENDIF} 无论如何当你得到一个 java 对象一定要先检查 是不是 nil否则轻则提示错误重则闪退。 EMBT 经常忘了检查所以就闪退例如你在窗体中放了一个 IAP 支付控件很多手机上都会闪退就是因为没检查 nil。 如果是正在开发的 APP 在任何机器上闪退特别是旧版本升级来的别人复制给你的。一般是 发布信息混乱造成的。工程的 发布(部署)信息需要【重新加载】。Deployment 需要 Revert to Default 如果是任何APP。包括新建的空 APP在特定的机器上一运行就闪退。说明是一个 BUG。请在本群的 不看后悔 系列中 解压 找 XE 修复 APK 启动提示 Cannot deploy, file not found.txt。 当你使用一个 jni 对象的时候。如果是个可以显示的对象。很多时候需要 CallInUiThread(     procedure     begin       jni 代码。     end); 有时候 还得换成 CallInUIThreadAndWaitFinishing。 只有这样 代码才不会死锁。 也就是 如果不这么写。你的 APP 就会出现 未响应。 有些不是显示的 jni 对象也需要这样写。不过不常见。 如果你收到一个错误 CalledFromWrongThreadException就是需要 CallInUiThread 了。 如果收到的是 Cant create handler inside thread that has not called Looper.prepare() 也是需要 CallInUiThread 了。多谢 [新会]supermay(15832782) 测试。 注意不要将大片代码进入上述的代码块中。尽量减少相关代码。最好是用 DEBUG 找出弹出这类错误提示的代码行。不会 DEBUG 请看书。 在 安卓的世界里回调函数是不存在的。但是可以使用接口来做到回调。 一般这种接口 会被定义成 Listener。 当你需要继承(实现)一个 java 接口的时候就需要查看有关代码了。 本帖隐藏的内容 使用 DELPHI IDE在 Search 菜单打开 Find In Files 对话框。 输入搜索关键字 class(TJavaLocal, 搜索范围 Search in directories 选择到你的安装目录的源代码目录选中 Indude subdirectories 好好找吧。 你会找到好多代码。 他们都是继承(实现) java 接口的好例子。 按照面向对象的说法 接口必须实现。所以上面找到的代码是必然的。 然后定义出这个类的 对象就可以当参数在 jni 中使用了。 不过这种类型是 delphi 的实现所以别忘了 free。 个人建议大家好好研读【unit System.Android.Bluetooth;】。 有时候 接口提供的 回调函数 可能是在线程中运行的。 这时候你实现这个函数的时候要注意。 UI 对象 无论是 FMX 的还是 jni 的。你都需要线程同步。 线程同步的简单方法就是。 ... //线程或回调函数里的一些代码。 TThread.Synchronize(nil, //或者 用线程自己的同步函数。 Synchronize(         procedure         begin           //你的界面交互代码。         end); //继续线程或回调函数的代码。 ... 如果是调用事件 建议用 TThread.Queue(nil,         procedure         begin           //你的事件调用。         end); 如果你 DEBUG 中收到了 Bitmap size too big 的提示有可能就是 该用同步没同步造成的。 10.2 以后不会再有这个提示。 Bitmap 支持线程中使用了。 10.2 开始主线程和 UI 线程 为同一个线程了。 CallInUiThread 应该可以大批量的不用了。 有了以上知识你基本上翻译 java 的代码就不成问题了。 别说你不会 顺序、判断、循环、函数调用。 如果你想了解一个 第三方 view 是如何显示到 FMX 中的。 可以参考 unit FMX.WebBrowser.Android 和 unit FMX.Media.Android。 另外很多操作都需要对应的权限别忘了加上。 对于 4.4 以上的系统想要访问外置存储卡。需要加上 uses-permission android:nameandroid.permission.READ_MEDIA_STORAGE/ uses-permission android:nameandroid.permission.WRITE_MEDIA_STORAGE/ 这 2 个权限。 目前 IDE 没有提供。 您需要在 AndroidManifest.template.xml 文档中自己加入用 IDE 就能打开找到 %uses-permission%将上述权限文字加入到 这行下面就行。 但是不保证所有机器都有效。 如果发现需要使用 安卓下面的 命令行例如执行 su sh ping 等。 可以参考 QDac http://blog.qdac.cc 的代码可能叫 QRuntime。 也可以参考 本群的 重启你的手机 源代码。 对于学习 翻译 安卓 java 代码为 pascal 。 最好先看 EMBT 的源代码。然后看 EMBT 的 Samples。 也可以好好看 本群的群共享。 里头好多调用 jni 的 DEMO。  相关工具 一种简单的 jar 转 pas 工具不如 EMB 官方提供的 工具 强大。 JarOrClass2Pas FlyingWang V1.0.2016.426 附赠 java 转 Jar.zip 2Pascal-新时代的Pascal-JarOrClass2Pas FlyingWang 1.0.2020.1116.27 附赠 java 转 Jar.zip - Powered by Discuz! (出处: 2Pascal-新时代的Pascal) 如果你希望使用 EMB 官方工具请打开你的 帮助搜索 Java2OP.exe 。 RAD10RTM 加载 jar 存在 BUG Log in - Embarcadero Technologies QC 中有解决办法。 建议去 EMB 官网注册 EDN 账号即可登录。 上面的  BUG 新版本已经 FIX 了。 手动翻译 JNI 的老文章 JNI 翻译 转 Delphi 的 经验 方法 http://www.2pascal.com/forum.php ... tid1100fromuid4 (出处: 2Pascal-新时代的Pascal) 可以参考的 DEMO。 BaiduLocation_百度定位_LBS_定位_5_SDK_DEMO_Add_Jar_BaiduLBS_Android5 2Pascal-新时代的Pascal-BaiduLocation_百度定位_LBS_定位_5_SDK_DEMO_Add_Jar_BaiduLBS_Android5 - Powered by Discuz! (出处: 2Pascal-新时代的Pascal) 安卓 服务 的 一些 相关代码自动启动服务或定时启动APP。 2Pascal-新时代的Pascal-安卓 服务 的 一些 相关代码自动启动服务或定时启动APP。 - Powered by Discuz! (出处: 2Pascal-新时代的Pascal) 专门的 DELPHI 实现 JAVA 接口 的 DEMO。 消息注册接收 DEMO。 Java 的消息及事件的一般做法的 DELPHI 版 源码。 安卓 接口实现的事件 动态注册 接收 WIFI 变化消息 Demo http://www.2pascal.com/forum.php ... tid3008fromuid4 (出处: 2Pascal-新时代的Pascal) 反射调用 java api java demo [mw_shl_codejava,true]    /**      * VIVO      * p      * android.util.FtFeature      * public static boolean isFeatureSupport(int mask);      * p      * 参数:      * 0x00000020表示是否有凹槽;      * 0x00000008表示是否有圆角。      *      * param context Context      * return hasNotch      */     private static boolean hasNotchInVivo(Context context) {     boolean hasNotch false;     try {         ClassLoader cl context.getClassLoader();         Class ftFeature cl.loadClass(android.util.FtFeature);         Method[] methods ftFeature.getDeclaredMethods();         if (methods ! null) {             for (int i 0; i methods.length; i) {                 Method method methods;                 if (method.getName().equalsIgnoreCase(isFeatureSupport)) {                     hasNotch (boolean) method.invoke(ftFeature, 0x00000020);                     break;                 }             }         }     } catch (Exception e) {         e.printStackTrace();         hasNotch false;     }     return hasNotch; }[/mw_shl_code] 作者brucevanfdm 链接漫谈Android手机刘海屏附工具类 - 简书 delphi demo 本帖隐藏的内容 [mw_shl_codedelphi,true]const   VIVO_NOTCH $00000020;//是否有刘海   VIVO_FILLET $00000008;//是否有圆角 type   JMethodInvoke interface; JMethodInvokeClass interface(JObjectClass) // or JObjectClass // SuperSignature: java/lang/reflect/AccessibleObject   [{78FDACCD-05FA-478C-AA11-4BF4794DFC7C}]     { static Property Methods } { static Methods } { static Property }   end; [JavaSignature(java/lang/reflect/Method)]   JMethodInvoke interface(JObject) // or JObject // SuperSignature: java/lang/reflect/AccessibleObject   [{6190D24D-0B94-4836-92C4-7F8B23C4FC9B}]     { Property Methods } { methods }     function invoke(receiver: JObject; args: TJavaObjectArrayJObject): JObject; cdecl; //(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; { Property }   end; TJMethodInvoke class(TJavaGenericImportJMethodInvokeClass, JMethodInvoke) end; var   IsVivoFeatureSupportMethod: JMethodInvoke nil;   ftFeatureClass: Jlang_Class nil; function IsVivoFeatureSupport(Mask: Integer): Boolean; begin   Result : False;   try     if (IsVivoFeatureSupportMethod nil) or (ftFeatureClass nil) then     begin       var ClassName : android.util.FtFeature;       var MethodName : isFeatureSupport;       var Signature : (I)Z;       if IsCanFindJavaStaticMethod(MethodName, Signature, ClassName) then       begin         //Result : TJFtFeatureUtil.JavaClass.isFeatureSupport(Mask);         //狗屁 vivo 一定要用反射调用。         var cl:JClassLoader : TAndroidHelper.Context.getClassLoader;         ftFeatureClass : cl.loadClass(StringToJString(ClassName));   //      var methods:TJavaObjectArrayJMethod : ftFeatureClass.getDeclaredMethods;         var methods:TJavaObjectArrayJMethod : ftFeatureClass.getMethods;         if (methods   nil) then         begin           var method: JMethod : nil;           for var I : 0 to methods.length - 1 do           begin             method : methods[I];             if (method.getName.equalsIgnoreCase(StringToJString(MethodName))) then             begin               IsVivoFeatureSupportMethod : JMethodInvoke(method);               break;             end;           end;         end;       end;     end;     if (IsVivoFeatureSupportMethod nil) and (ftFeatureClass nil) then     begin       var args : TJavaObjectArrayJObject.Create(1); //maybe auto free       try         args.Items[0] : TJInteger.JavaClass.init(Mask);         Result : JBoolean(IsVivoFeatureSupportMethod.invoke(ftFeatureClass, args)).booleanValue;       finally         FreeAndNil(args);       end;     end;   except     Result : False;   end; end;[/mw_shl_code] ———————————————— 版权声明本文为CSDN博主「xyzhan」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/xyzhan/article/details/121744538
http://www.zqtcl.cn/news/648774/

相关文章:

  • 网站名称创意大全wordpress公开课插件
  • 淮安市城市建设档案馆网站可以做网页的软件
  • 网站空间服务器wordpress 排除置顶文章
  • 有域名后怎么做网站邯郸做移动网站的地方
  • 商标可以做网站吗网站开发的大学生应届简历
  • 长沙长沙网站建设公司saas系统架构
  • 成都销售型网站长春财经学院多大
  • 手机自己制作表白网站app项目网络计划图怎么画
  • 品牌网站如何做seo浏览器正能量网址
  • 开封做网站哪家好网页设计制作网站大一素材
  • 河南网站域名备案莱芜新闻电视台节目表
  • 长春网站建设新格做天猫还是做网站推广
  • 新网站建设的感想安阳区号是什么
  • 余姚市城乡建设局网站wordpress 预览插件
  • 游戏开发和网站开发wordpress foreign trade
  • 网站设计 原型图html购物网站模板
  • 谷歌网站推广报价国产搜什么关键词最好看
  • 婚礼网站有哪些个人做网站需要什么条件
  • 深圳企业网站seo人才招聘网站建设
  • 谷歌下载seo是什么软件
  • 个人网站设计分析小程序在线制作平台
  • 网站开发 一般用什么语言vi视觉设计案例
  • 微信公众平台官方网官网seo优化找哪家做
  • 简约 网站模板网站目录链接怎么做
  • 国内地铁建设公司网站大连做网站外包
  • 微网站营销是什么网站图片上传代码
  • 外包公司做网站多少用vs做的网站怎么打开
  • 兴义城乡建设部网站企业服务器配置方案
  • 淘宝客网站根目录wordpress调用导航代码
  • 海外免费网站推广网站开发项目报告书