
展现出来的原理:
用户看到的是结果展现(css+js浏览器渲染),搜索引擎读的则是代码(html代码结构),而让这一切运作起来,靠的就是程序源码(服务器端语言);
方法:
除非你把源码展现(贴)在页面(html页面)里,而不是服务器程序端,搜索引擎能读到你贴出来的源码;
example:
就好比,我们在后台编辑一篇文章,但是我们只点击保存草稿,而不是点击发布,那么用户和搜索引擎完全是没办法看到和读取的。
→南京网站建设小拉为您解答,如有不足,请各位大神批评指正,小拉会虚心学习,不断进步,谢谢!
如何在Android源码里查找Java中native方法对应的C++实现
在framework下全局搜索这个native方法的全名。一个个查看匹配的文件,应该会找到你需要的。一般命名都有规律,大部分jni方法都在 \frameworks\base\core\jni目录
在Android源码里,有许多方法都是使用Jni机制调用底层的C++实现,比如大家都很熟悉的Binderjava里,就有 public static final native int getCallingPid(); public static final native int getCallingUid(); public static final native long clearCallingIdentity(); 等方法都是直接调用C++里的实现。 通过下面命令可以很快找到对应的实现, build/envsetup cgrep /frameworks '"getCallingPid"' 这时会查找到如下结果: 这样就可以知道对应的C++实现方法名字为android_os_Binder_getCallingPid, 在该文件中找这个方法的实现即可。
android源码只包含android app java的客户端代码。
native部分可能有可能没有,先全局搜索c或者cpp文件,有这些文件才可能有。
如果是标准的android native support 工程,那么eclipse里面打开之后,在工程目录/jni下面就是 native的C++代码。
比如有方法aaabbbCCCddd,JNI对应的名字就是Java_aaa_bbb_CCC_ddd,地图炮搜索就是了,注意不要用全字段匹配,因为JNI名可能还带参数后缀。
另外你的确定你是下的整套Android系统的源码,不是SDK附带的那个源码,那个只有Java的而且还不全。
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代码的示例VMThreadjava:
package javalang;
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/piler/dex/quick/dex_file_method_inliner:108: "currentThread", kNameCacheCurrentThread
匹配到二进制文件 /dalvik/vm/native/java_lang_VMThreadcppswp
/dalvik/vm/native/java_lang_VMThreadcpp:241: { "currentThread", "()Ljava/lang/Thread;",
/external/android-mock/testsgoogle/android/testing/mocking/AndroidMockGeneratorTestjava:249: Method method = ThreadclassgetMethod("currentThread");
/external/android-mock/testsgoogle/android/testing/mocking/AndroidMockGeneratorTestjava:407: Method method = ThreadclassgetMethod("currentThread");
可以看到,在文件/dalvik/vm/native/java_lang_VMThreadcpp中找到currentThread方法相关的信息,后面()Ljava/lang/Thread代表这个方法的返回值。
进入java_lang_VMThreadcpp这个文件可以看到:
17 /
18 javalangVMThread
19 /
20 #include "Dalvikh"
21 #include "native/InternalNativePrivh"
22
23
24 /
25 static void create(Thread t, long stacksize)
26
27 This is eventually called as a result of Threadstart()
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 / copying 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行。
这个方法不是很准确,要靠经验来判断搜出来的代码是否是自己要找的,下一个方法可以较准确的查找。
方法二:
还是找VMThreadjava的currentThread函数,找多了会发现,C++的名字一般都是包名+类名+方法名,比如currentThread的C++名字就肯定包含“java_lang_VMThread_currentThread”,所以直接搜索即可。
如何在Android源码里查找Java中native方法对应的C++参考::edu51cto/course/course_id-4377
知道方法名就知道C++里的函数名了,native方法的函数名是 Java_包名_类名_函数名 开头的,包名要把换成_。比如xxxyyyClassAmethodB在C++那边找Java__xxx_yyy_ClassA_methodB就行了
如何在eclipse中查看android源码假设我们想参看Activity类的源代码,按着Ctrl键,左击它,现实的结果却看不到代码的,提示的信息便是“找不到Activityclass文件”。
此时点击下面的按钮,“Change Attached Source…”,选择android源代码所在位置,便d出对话框。
第一种是选择工作目录,即已经存在的android应用程序源代码。
第二种分两种方式
(1)选择External File…按钮,添加Jar格式文件或者zip格式文件路径;
(2)选择External Floder…按钮,添加文件夹所在路径。
下面问题就来了,源代码在哪里?不能凭空产生阿。
可以通过Android SDK Manager进行源代码下载;(推荐该种方法),勾选Source for Android SDK,进行下载即可。
此外也可通过其他途径下载,网上有很多共享的资源。
这里选择第二种方式的(2)方法,选择源码所在目录(即下载源代码目录所在路径)
点击“OK”按钮,此时,Activity文件便能够查看源代码了
以上就是关于能否用搜索引擎搜到网站html源码中的内容全部的内容,包括:能否用搜索引擎搜到网站html源码中的内容、如何在Android源码里查找Java中native方法对应的C++实现、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)