macOS Sierra (10.12.3)使用Android Studio 2.2.3导入Android 5.1.1_r38 (Lollipop)源代码

1.编译Android 5.1.1_r38源代码

参考链接:
macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码

2.调整Android Studio的属性

默认情况下,macOS的磁盘分区文件名是不区分大小写的,但是我们编译的Android 5.1.1_r38源代码却是在新建的一个区分大小写的分区上的,因此需要临时要求Android Studio区分文件名的大小写。

$ vim ~/Library/Preferences/AndroidStudio2.2/idea.properties

在其中增加

idea.case.sensitive.fs=true

3. 编译Android SDK

Android SDK我们需要自己编译注意,此时磁盘空间可能已经不足了,我们首先增大一下磁盘空间

$ hdiutil detach /Volumes/android

$ hdiutil resize -size 100G ~/Android/android.dmg.sparseimage

$ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

$ cd /Volumes/android

$ cd Android_Source

$ source build/envsetup.sh

$ lunch sdk-eng

$ export TARGET_BUILD_TYPE=debug

由于我们修改了TARGET_BUILD_TYPE,因此需要调整代码

$ vim ./development/build/sdk.atree

全部替换里面的${OUT_DIR}/target${OUT_DIR}/debug/target

编译代码

$ make sdk -j8

编译好的文件在out/host/darwin-x86/sdk/sdk目录下面。

4.生成工程文件

工程目录与编译目录相同

$ cd /Volumes/android

$ cd Android_Source

$ mmm development/tools/idegen/

$ ./development/tools/idegen/idegen.sh

$ rm -rf .classpath

编译完成后,在/Volumes/android目录下,生成android.ipr,然后用Android Studio 2.2.3导入已经存在的项目即可,导入后,需要比较长时间建立索引,要耐心等待。

导入完成后,根据错误提示,设置JDK为我们编译内核时候的JDK,设置Android SDK为我们刚刚编译的版本即可。
File->Project Structure->Project Settings->Project->Project SDK中设置JDK版本。

File->Project Structure->Project Settings->Modules->android->Dependencies中设置Android SDK路径以及版本。

参考链接


macOS Sierra (10.12.3)上通过SSH免密码登录Ubuntu 14.04服务器

1.先参考 Putty通过SSH无密码登陆Ubuntu12.04 配置好Linux服务器,并保证在Windows下可以正常自动登录服务器

2.拷贝已经配置好的私钥到当前登录用户的.ssh目录下

$ scp -P 22 root@www.mobibrw.com:~/.ssh/id_rsa ~/.ssh/id_rsa.mobibrw

3.使用指定的私钥登录服务器

$ ssh www.mobibrw.com -l root -p 22 -i ~/.ssh/id_rsa.mobibrw

macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码

前置条件


  • macOS Sierra  (10.12.3)
  • Homebrew (1.1.9 或更高版本)
  • Xcode (8.2.1 或更高版本)
  • Xcode (5.1.1 只能是此版本)

准备环境


1.创建大小写区分的磁盘分区

$ cd ~

$ mkdir Android

$ cd Android

$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g android.dmg

2.挂载刚刚创建好的分区

$ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android

3. 切换到刚刚挂载的分区

$ cd /Volumes/android

4.安装最新版本的repo

$ brew update

$ brew install repo

5. 安装依赖的第三方应用

$ brew update

$ brew install GnuPG

$ brew install gnupg2

6.下载并安装Xcode 5.1.1此版本,我们只是使用其中的SDK,其他的,我们使用8.2.1中的工具,注意,我们只能使用MacOSX10.8.sdk才能顺利编译通过。

下载地址 http://adcdownload.apple.com/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg

下载之后,安装之前我们先把8.2.1的Xcode重命名一下,稍后我们再修改回来即可。我们安装之后,提取Xcode 5.1.1版本里面的"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk",然后拷贝到Xcode 8.2.1 版本的"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"目录下面。操作完成后,可以删除Xcode 5.1.1

也可以从phracker/MacOSX-SDKs 获取已经提取好了的版本。

执行如下命令,使得低版本的SDK生效。

$ sudo /usr/libexec/PlistBuddy -c "Set :MinimumSDKVersion 10.8" /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist

如此操作的原因有两条:

(1)在macOS Sierra  (10.12.3)上,Xcode 5.1.1无法执行,因此没办法做到两个版本并存.

(2)如果通过修改代码来把代码中限制的系统版本调整到10.8版本以上,则GCC存在BUG,导致编译无法正常通过,具体的BUG参考
libgcc: error: unknown value '10.10' of -mmacosx-version-min

7.下载Android-5.1.1_r38源代码(此处请准备梯子,或者自己从国内源进行替换)

$ mkdir Android_Source

$ cd Android_Source

$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r38

$ repo sync

编译代码


1.设置编译需要的环境信息

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

2.切换Java版本到1.7

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

3.清理代码,为编译准备干净的环境

$ make clobber

4.引入编译环境变量

$ source build/envsetup.sh

5.设置编译目标,此处我们指定编译ARM下的完整调试版本

$ lunch aosp_arm-eng

6.如果需要跟踪调试代码,建议编译为调试类型

$ export TARGET_BUILD_TYPE=debug

7.编译

$ make -j8

注意此处如果发生编译失败,原因基本上是编译顺序导致的引用出错,也就是某些模块还没有编译完成,其他模块已经开始尝试链接,导致依赖错误,此时只要把多线程并发编译修改成单线程编译即可,即直接执行

$ make

运行镜像


$ cd /Volumes/android/Android_Source

$ export ANDROID_BUILD_TOP=/Volumes/android/Android_Source

$ export PATH=$PATH:$ANDROID_BUILD_TOP/out/host/darwin-x86/bin

$ export ANDROID_SWT=$ANDROID_BUILD_TOP/out/host/darwin-x86/framework

$ export ANDROID_PRODUCT_OUT=$ANDROID_BUILD_TOP/out/debug/target/product/generic

$ ./prebuilts/android-emulator/darwin-x86_64/emulator -system ./out/debug/target/product/generic/system.img -data ./out/debug/target/product/generic/data.img -ramdisk ./out/debug/target/product/generic/ramdisk.img

上面运行起来的镜像是从/Volumes/android/Android_Source/out/debug/target/product/generic/hardware-qemu.ini即可读取配置信息的,但是这个文件直接修改无效,我们如果需要修改参数,只能从启动参数中设置。
比如我们如果需要增大内存,开启GPU的支持,则执行如下命令:

$ ./prebuilts/android-emulator/darwin-x86_64/emulator -system ./out/debug/target/product/generic/system.img -data ./out/debug/target/product/generic/data.img -ramdisk ./out/debug/target/product/generic/ramdisk.img -gpu on -memory 2048 

参考链接


WordPress 4.7.x版本禁用 REST API

最近WordPress频繁爆出漏洞,尤其是REST API部分,简直是漏洞百出,但是,从4.7.0版本开始,这部分功能被深度整合进入了核心模块,没办法彻底屏蔽REST API,只有通过rest_authentication_errors这个接口来限制非登陆用户,具体代码如下

<?php
	add_filter('rest_authentication_errors','disable_rest_api');
	function disable_rest_api(){
		if(!is_user_logged_in()){
			return new WP_Error('Error!', __('Unauthorized access is denied!','rest-api-error'), array('status' => rest_authorization_required_code()));
		}
	}
?>

此部分的代码需要被添加到当前主题的functions.php中的最后即可。
增加完成后,重启Apache2服务器,然后再访问https://www.mobibrw.com/wp-json/ 就可以看到错误信息了。

参考链接


解决从WordPress 4.7.1升级到WordPress 4.7.2失败后再次更新提示"另一更新正在进行"

从WordPress 4.7.1升级到WordPress 4.7.2,中途失败了,结果再次更新的时候,提示“另一更新正在进行”,如下图所示:

这是由于在升级WordPress时,WordPress会在数据库wp_options表中增加core_updater.lock记录。如中途打断WordPress升级,这个记录会留在数据库中。当下次升级时,WordPress检测到此记录的存在就会返回”另一更新正在进行”。可通过终端登录数据库删除这条记录来处理.

$ mysql -u root -p 

$ mysql> use wordpress;

$ mysql> select * from wp_options where option_name='core_updater.lock';

$ mysql> delete from wp_options where option_name='core_updater.lock';

$ mysql> exit;

如上操作之后,再次重新升级,就可以解决问题了。

参考链接