基于MAC Android 8.1源码下载编译阅读

2023-05-16

      学Android也有比较长的一段时间了,但是对于android源码的认识自己总感觉似懂非懂,因为自己也仔细看过相关的书籍、对于遇到过的一些问题也分析过源码,但还是觉得对于Android底层代码的实现存在一只半解,很多时候都处于代码开发、遇到问题再去谷歌百度的状态,没有对Android有个相对细节性的系统整体认识,所以这就需要以后在学习的过程中加强源码阅读和理解。基于目前大多数看源代码都是通过http://androidxref.com/ 看的,个人感觉虽然方便查找,但是不利于整体性阅读,代码跳转感觉特别不方便。因此参考官网和相关网上经验,记录下载Android源代码遇到的问题。

一、Android源码下载编译

这个过程就不仔细叙述,官网和其他经验网上很多,在此,我就简单列举一些我看过的网页,基本按照上述步骤就可以下载安装完成:

官网:https://source.android.com/setup/

清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/  (推荐给不能翻墙的同学)

Mac 10.12编译Android源码:https://www.jianshu.com/p/1513fc9e1a74

这篇文章其实跟官网的步骤差不多,但是分系列解释,遇到的问题基本在mac上下载编译都遇到过,所以基本完全按照这个步骤进行,但也可能遇到其所没有遇到的问题。

Android源码、内核编译:https://www.cnblogs.com/palance/p/5187103.html

上面几篇文章可以对比看一下,步骤基本一致,如果可以尽量去官网,介绍和解释都比较详细。

二、遇到的问题

这部分是我要写的主要内容,帮我记录一下在Android源码、下载、编译遇到的问题,方便以后我及其他同学遇到这些问题时能够快速解决。

首先,先复制几个网址,给出其他人遇到的问题的解决方法,其中都有我遇到的问题和没有遇到的问题,针对我遇到的问题后续我会详细列出,如果遇到的其他问题,可以参考这些网页进行借鉴吧。

https://blog.csdn.net/it_liuchengli/article/details/77040806

https://blog.csdn.net/dengjiamingcsu/article/details/79695657

https://blog.csdn.net/yanzi1225627/article/details/69941284

https://blog.csdn.net/h649305597/article/details/80322488

https://blog.csdn.net/txl19881019/article/details/44081865

https://source.android.com/setup/

其中,具体我遇到的问题有:

1.使用移动硬盘下载编译。

对于刚使用Mac的不久的我来讲,Mac给日常开发带来很好的体验,然后其硬盘存储空间相对比较小,因此不忍心将源码下载到本地硬盘中,因此准备采用移动硬盘进行扩展,将源码下载进去。在此过程中遇到两个问题:

(1)使用的移动硬盘是NFTS格式,所以对于Mac来讲只能读取, 不能写入,后来在网上找到一个免费软件Mounty,参考网页:https://jingyan.baidu.com/article/a3aad71aa1dde7b1fb0096ab.html

(2)解决了移动硬盘在Mac上写入问题之后,根据官网下载步骤说明支出,因为Mac默认文件系统是不区分大小写的,因此需要创建一个文件系统来支持大小写,因此需要新建一个dmg,官网给出的命令行新建的镜像位置放在~(通常是User/用户名)文件目录下,所以需要修改文件位置,具体步骤如下:

  • 进入移动硬盘目录下
  • 创建镜像文件:hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ./android.dmg
  • 挂载镜像文件:hdiutil attach ./android.dmg -mountpoint /Volumes/android;
注意创建的文件可能为android.dmg.sparseimage,所以挂载的时候应具体而定。

(3)因为移动硬盘有时候需要插拔,所以希望能够在硬盘挂载之后自动就把该镜像挂载,或者更简单直接运行一个shell脚本运行,代码后面学习再上传。

2.安装Gnupg过时

在执行命令 POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg 时候,出现一下错误:

Error: gnupg has been deprecated. If you absolutely want to stay on the classic version, install the gnupg1 port. All other users are recommended to install gnupg2.
Error: Failed to configure gnupg: obsolete port
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_mail_gnupg/gnupg/main.log for details.
Error: Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port gnupg failed
  • 1
  • 2
  • 3
  • 4
  • 5

由于gnupg已经过时,如果要继续使用gnupg的话,改为下载gnupg1;Error中建议大家使用gnupg2,我用的就是gnupg2。需要先关闭gnupg1的端口。

POSIXLY_CORRECT=1 sudo port uninstall gnupg1
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg2

参考网页:https://blog.csdn.net/dengjiamingcsu/article/details/79695657

3.RPC failed; curl 18 transfer closed with outstanding read data remaining

这个错误参考网页:https://blog.csdn.net/it_liuchengli/article/details/77040806 ,我是采用上面所说的第一种方式就解决了。

4.分配dmg空间不足

在创建dmg文件时候,官网上指出最少25g,有的创建50g,我就设置dmg大小为80g,后来发现空间不足,因此需要重新分配大小,命令:


hdiutil resize -size <new-size-you-want>g ./android.dmg.sparseimage  

其实我认为可以分配大点,因为dmg只是限制你最大空间,不会直接占用硬盘空间。

5.缺少相应的 MacOsX sdk

internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
ninja: build stopped: subcommand failed.
20:37:11 soong bootstrap failed with: exit status 1
make: *** [run_soong_ui] Error 1
  • 1
  • 2
  • 3
  • 4
这个问题网上也报过,而且一般发生在make clobber命令之后,具体出现这种问题网页有:https://www.jianshu.com/p/1513fc9e1a74 ,但是我在执行的时候并没有发生,命令正常运行,但是在我make的时候报了这个错误,依照网上的解决方案应该有两个:一是下载其需要的MacOsX sdk,二是修改源码目录/build/core/combo/mac_version.mk文件,修改其所需要的mac环境,如下:
不管方案一还是方案二需要解决的问题就是MacOsX sdk位置及其当前版本确认。这是在Xcode安装目录下,好像一般都是自带的,具体没有深究,在网上看有的是自己安装的,所以目录一般是Application目录下,具体看这个问题链接,但是我的Xcode目录并不是在其所指的位置,但可以通过命令xcode-select -p找到其所安装的目录。找到其安装的目录之后,发现我的版本是sdk 10.13,而需要的是10.10 10.11 10.12的,所以最简单的方法采用方案二,直接修改mac_version.mk文件,然而我去那个目录下找却没有找到,网上也没有遇到这个问题, 所以只能等以后有时间的时候再具体了解哪里修改,所以采用方案一,下载一个10.12版本,解压放在那个目录下,记得需要sudo,但是放进去之后好像还不行,因为查看其权限,多了个@,可通过如下命令行去除:  
xattr -c -r *

参考网页:https://blog.csdn.net/buyueliuying/article/details/77604225

6.error: Exited sync due to fetch errors

关于这个问题网上有不同的解决方法,目前采用https://blog.csdn.net/txl19881019/article/details/44081865方案使用命令:
repo sync -j8

7.bison不能正常使用

[  0% 310/89583] //external/selinux/ch...eckpolicy yacc policy_parse.y [darwin
FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h 
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d  --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y
[  0% 317/89583] //system/core/bootstat:bootstat clang++ bootstat.cpp
ninja: build stopped: subcommand failed.
12:58:42 ninja failed with: exit status 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个问题通过https://blog.csdn.net/h649305597/article/details/80322488找到,在这个网页上说明一些7.1,8.1编译时的错误,在此引用其解决办法:这个错误都是由于bison不能正常使用导致的。可以使用

./prebuilts/misc/darwin-x86/bison/bison
  • 1

检测一下你的源码中的bison是否正常工作。 

网上有一些国内复制粘贴的解决办法但我没有走通,下面是我在谷歌搜索到的解决方案:

1、定位到源码中external/bison文件夹


cd external/bison  

2、在文件夹创建文本文件patch-high-sierra.patch并把下面代码复制进去()

With format string strictness, High Sierra also enforces that %n isn't used
in dynamic format strings, but we should just disable its use on darwin in
general.

--- lib/vasnprintf.c.orig   2017-06-22 15:19:15.000000000 -0700
+++ lib/vasnprintf.c    2017-06-22 15:20:20.000000000 -0700
@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
 #endif
                   *fbp = dp->conversion;
 #if USE_SNPRINTF
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
                 fbp[1] = '%';
                 fbp[2] = 'n';
                 fbp[3] = '\0';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3、在控制台(保证当前目录是external/bison)执行

patch -p0 < patch-high-sierra.patch  
  • 1

4、返回根目录

cd ../..  
  • 1

5、编译bison

make bison
  • 1

6、复制bison到AOSP编译时寻找bison的位置

cp ./out/host/darwin-x86/obj/EXECUTABLES/bison_intermediates/bison ./prebuilts/misc/darwin-x86/bison/bison 
  • 1

经过我自己的验证在7.1以后的版本都需要使用这个来解决bison失效的问题,至少现在还是这样的。报的类似错误都可以用这个方式试试。

8.

Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
GC overhead limit exceeded
Try increasing heap size with java option '-Xmx<size>'
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.

参考网页:https://blog.csdn.net/brightming/article/details/49763515/
通过修改jack-admin文件,设置Xmx,其最好设置大一点,网页上给的2048仍然会出现这个错误,所以在有的网页上看最好设置内存的一半。

9.编译成功后,使用emulator启动模拟器出现启动正常,但是模拟器弹窗提示System UI isn't responding。

这个问题可以参考:Process system isn't responding in android emulator ,但是后来我发现,这个问题主要在模拟器刚启动的时候会弹出,过一会就OK了。

10.将Android源码导入Intellij IDEA中,出现有的引用(如com.android.internal.R)找不到,有些类重复定义。

将源码导入Intellij中,可参考https://www.jianshu.com/p/1d1b8d0de1ed,其实基本按这步骤去操作,应该没什么问题,但是我偏偏遇到三个问题:

(1)导入代码之后,发现源代码目录下各个子目录中src目录没有在Idea中,但是通过两次shift却能找到相应的类,点击工程栏中的定位,定位没有反应。这个问题通过把原来的moudle移除,然后重新make、运行sh,再添加android.iml,所有代码就全部导入Idea中了。

(2)导入之后按照参考步骤sync之后,发现com.android.internal.R识别不了,有些代码如Activity代码出现错误提示,其实对于只是看源码来讲,应该没什么问题,自己也可以从源代码中找到相应的位置,但是这个问题一直膈应我,总觉不舒服,所以花了两天时间解决(主要还是每次sync时间太长了),刚开始是依赖问题,了解Idea中的设置,依赖配置,还是没有用,后来发现其他类都变成类的图标,就是这个类是java图标,点进具体的R文件中有个提示:file size exceeds configured limit , 才恍然大悟,原来的idea设置问题,导致这个文件太大编译不了,后来参考https://blog.csdn.net/u013659732/article/details/68942207?ref=myread,设置idea中的idea.max.intellisense.filesize=9999值,单位是KB,然后就能找到了。

(3)有的类重复定义,如Acitivty等,其实在参考教程,有一步是把dependence的依赖全部删除,只留下jdk,这两个问题我觉得类似,其实在编译的时候生成很多jar文件等,这样会导致依赖和源码都有对应的类,所以重复定义,我遇到的问题是,我已经按照参考步骤去除依赖,但是还是发现有重复定义类,遇到这类问题看提示看重复定义位置,然后去那个文件目录发现其被标记为源根(参考:https://blog.csdn.net/zx48822821/article/details/78640041),如我的问题是Activity类在out一个子目录下,去找到那个目录,发现被标记为(源根),右击,选择unmark source root,然后重新编译即可。

   基本上下载、编译、导入遇到的问题就这些,调试可以参考https://www.jianshu.com/p/7c2ab3d9498c、https://www.cnblogs.com/Lefter/p/4176991.html这两篇文章,我尝试一下,启动模拟器和monitor太慢了,所以就没有尝试了,之后再急需吧。

注:写的可能比较乱,以后有时间再继续进行整理,希望对其他同学有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MAC Android 8.1源码下载编译阅读 的相关文章

  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 自定义选择器活动:SecurityException UID n 无权 content:// uri

    我正在构建一个选择器应用程序来替换本机 Android 共享对话框 它工作正常 除非我尝试通过长按图像 gt 共享图像从 Chrome 共享图像 我发现 Google 没有捕获异常 它崩溃了 所以我可以通过 Logcat 查看它 在 Goo
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • Camera.open()返回NULL Android开发

    我正在按照构建相机应用程序的教程进行操作http developer android com tools device html http developer android com tools device html我对 Camera o
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • 菜单在片段的 onCreateOptionsMenu 处多次膨胀调用

    我使用 Fragments 当我切换到嵌套 Fragment 时 它实现了public void onCreateOptionsMenu Menu menu MenuInflater inflater 当我到达该嵌套片段时 我的菜单会多次膨
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android

随机推荐

  • S_OK,S_FALSE,E_FAIL

    今天在调试一个ICOP的操作的时候 xff0c 发现连接被动关闭的时候老是会在一处断言处失败 xff0c 跟了很久终于发现了问题 在此记录一下 xff1a 断言报错的代码如下 xff1a HRESULT CIoCPWorker UnregI
  • Win7 应用程序无法正常启动(0xc000000d)的解决方法

    自从重装了WIN7系统后 xff0c VS2010编译出来的项目程序就不能正常启动 xff0c 启动的时候总是提示 应用程序无法正常启动 xff08 0xc000000d xff09 请单击 确定 关闭应用程序 在网上查找了很多解决方案 x
  • MySQL存储过程where条件执行失败的问题

    前几天对服务器实体做了属性缓存机制 xff0c 当时测试也没有出现大的问题 xff0c 昨天有人跟我说 xff0c 登陆的时候角色等级显示错误 xff0c 我复测了一下 xff0c 发现不只是等级错误 xff0c 进入游戏后角色位置 金钱
  • 程序员与厨师

    不管你信不信 反正我是信了 每一个程序员上辈子都是呆在厨房的厨子 好吧 你不信 我来证明给你看 1 下厨前 你得知道做的是早餐还是中晚餐 中晚餐的话 怎么也得走趟超市 如遇到好友聚会 怎么着也得做出一桌对得起朋友的饭菜 还有你得分析 朋友中
  • VS2010/VS2012 设置全局头文件和库路径

    在VS2010之前 xff0c 设置项目的全局头文件和库路径是非常方便的 xff0c 直接选择菜单Tools gt Options gt Projects and Solutions gt VC 43 43 Directories xff0
  • Linux下rz/sz安装及使用方法

    新搞的云服务器用SecureCRT不支持上传和下载 xff0c 没有找到rz命令 记录一下如何安装rz sz命令的方法 一 工具说明 在SecureCRT这样的ssh登录软件里 通过在Linux界面里输入rz sz命令来上传 下载文件 对于
  • 关于mysql存储过程创建动态表名及参数处理

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 最近游戏开始第二次内测 xff0c 开始处理操作日志 xff0c 最开始把日志放到同一个表里面 xff0c 发现一天时间 xff0c 平均1
  • 关于mysql自增id的获取和重置

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog mysql获取自增id的几种方法 使用max函数 xff1a select max id from tablename 优点 xff1a 使
  • 关于SQL中Union和Join的用法

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 一直以来 xff0c 对于数据库SQL方面都是半吊子水平 xff0c 能写一些基本的增删改查的语句 xff0c 大部分时间都是用下Where
  • 使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行 xff0c 我花了几周时间将linux的服务器移植到windows下面 xff0c 目前已经能够正常运行服务器 xff0c 目前又有了新需求 xff0c 两边的代码结构和组织是分开的 xff0c 因此
  • linux下shell技巧

    经常看到一些大牛操作linux的时候 xff0c 双手运指如飞 xff0c 指令如流水般输出 xff0c 会不会感到羡慕呢 xff1f 本文就整理了一些linux下shell的技巧 xff0c 保管你学会之后 xff0c shell输出ap
  • Cmake在windows支持预编译头文件(stdafx.h)

    最近一直在研究cmake构建项目 xff0c 之前接触cmake的时候就感觉不太喜欢cmake xff0c 觉得它太乱了 xff0c 产生了太多的中间文件 xff0c 产生的项目文件也不是特别友好 xff0c 在windows下 xff0c
  • win服务器设置开机自动登录

    之前设置了一个开机自动执行脚本 xff0c 发现重启服务器之后没有生效 xff0c 原因在于 xff0c 服务器重启之后 xff0c 不会自动登录用户 xff0c 因此没有执行脚本 xff1b 因此第一步先设置服务器启动之后自动登录用户 x
  • Zynq ZC702平台 QSPI + eMMC实现

    预备知识 xff1a UG821 The processor system boot is a two stage process Another boot mode supported through FSBL is eMMC boot
  • 什么是Vista?

    Vista是微软下一代操作系统 xff0c 以前叫做Longhorn xff08 微软当初内部的代号 xff09 7月22日微软对外宣布正式名称是Windows Vista 作为微软的最新操作系统 xff0c Windows Vista第一
  • Android识别模拟器,判断是模拟器还是真机

    文章目录 前言原理禁止模拟器安装apk代码识别验证最后 前言 对于android开发者来说 xff0c 模拟器是开发工具 xff0c 但是对用户来说 xff0c 可能就是薅羊毛 找漏洞的赚钱工具 不管是活动风控还是内容保护等等其他的出发点
  • Dataframe.info()显示空值与类型信息

    使用Dataframe info 默认不带参数只显示摘要信息 如果想显示空值信息与类型信息 testData span class token punctuation span info span class token punctuati
  • 创建WinPE启动盘、常用imagex指令、常用dism指令

    创建WinPE启动盘 常用imagex指令 常用dism指令 一 创建WinPE启动盘 1 准备工作 下载WAIK工具 xff1a WAIK下载页面 lesca使用的WAIK版本 xff1a KB3AIK EN iso copype cmd
  • response.setContentType 文档输出类型

    1 Response AddHeader 34 content type 34 34 application x msdownload 34 类型列表 代宏的文档 2 34 34 61 34 application octet stream
  • 基于MAC Android 8.1源码下载编译阅读

    学Android也有比较长的一段时间了 xff0c 但是对于android源码的认识自己总感觉似懂非懂 xff0c 因为自己也仔细看过相关的书籍 对于遇到过的一些问题也分析过源码 xff0c 但还是觉得对于Android底层代码的实现存在一