百度作为中国互联网的一颗毒瘤,实在是需要远离。可惜华为系统自带的输入法恰恰就是百度的输入法。
分类: Android
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
安卓版的Firefox如何关闭打开某些网页时自动启动本地APP
手机上已经安装了手机淘宝的APP
,或者有天猫店铺网店的页面,比如飞歌导航的官网,如果Firefox
打开这个网页,就会自动启动手机淘宝APP
,导致整个系统非常卡顿。
下面我们看如何关闭这个功能,如下图:
FloatingActionButton浮动按钮动画效果实现
我们想实现一个跟知呼功能类似的悬浮按钮,点击后会展开相应的菜单。
Android Studio 2.3调试小米手机安装失败
Android Studio 2.3
调试小米手机MIUI 8.7.4
的时候,安装APK
一直失败,错误信息如下:
1 2 3 4 5 6 |
$ adb install-multiple -r /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_7.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_6.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_8.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_9.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_3.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_4.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/dep/dependencies.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_2.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_5.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_0.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_1.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/outputs/apk/app-debug.apk $ adb shell pm uninstall com.guo.duoduo.anyshareofandroid $ adb install-multiple -r /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_7.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_6.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_8.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_9.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_3.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_4.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/dep/dependencies.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_2.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_5.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_0.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/intermediates/split-apk/debug/slices/slice_1.apk /Users/longsky/Source/AnyShareOfAndroid/app/build/outputs/apk/app-debug.apk $ adb shell pm uninstall com.guo.duoduo.anyshareofandroid DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs |
网上查询了一下,是MIUI
自身的优化导致的问题。
解决方法就是在MIUI
->设置
->更多设置
->开发者选项
->启用MIUI优化
,关闭这个选项就可以了。
参考链接
Android Studio 2.3 adb install-multiple Failed to create session Failure [UNS...
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
区分文件名的大小写。
1 |
$ vim ~/Library/Preferences/AndroidStudio2.2/idea.properties |
在其中增加
1 |
idea.case.sensitive.fs=true |
3. 编译Android SDK
Android SDK
我们需要自己编译。注意,此时磁盘空间可能已经不足了,我们首先增大一下磁盘空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ 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
,因此需要调整代码
1 |
$ vim ./development/build/sdk.atree |
全部替换里面的${OUT_DIR}/target
为${OUT_DIR}/debug/target
。
编译代码
1 |
$ make sdk -j8 |
编译好的文件在out/host/darwin-x86/sdk/sdk
目录下面。
4.生成工程文件
工程目录与编译目录相同
1 2 3 4 5 6 7 8 9 |
$ 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)上编译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.创建大小写区分的磁盘分区
1 2 3 4 5 6 7 |
$ cd ~ $ mkdir Android $ cd Android $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g android.dmg |
2.挂载刚刚创建好的分区
1 |
$ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android |
3. 切换到刚刚挂载的分区
1 |
$ cd /Volumes/android |
4.安装最新版本的repo
1 2 3 |
$ brew update $ brew install repo |
5. 安装依赖的第三方应用
1 2 3 4 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生效。
1 |
$ 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
源代码(此处请准备梯子,或者自己从国内源进行替换)
1 2 3 4 5 6 7 |
$ mkdir Android_Source $ cd Android_Source $ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r38 $ repo sync |
编译代码
1.设置编译需要的环境信息
1 |
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer |
2.切换Java版本到1.7
1 |
$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7) |
3.清理代码,为编译准备干净的环境
1 |
$ make clobber |
4.引入编译环境变量
1 |
$ source build/envsetup.sh |
5.设置编译目标,此处我们指定编译ARM
下的完整调试版本
1 |
$ lunch aosp_arm-eng |
6.如果需要跟踪调试代码,建议编译为调试类型
1 |
$ export TARGET_BUILD_TYPE=debug |
7.编译
1 |
$ make -j8 |
注意此处如果发生编译失败,原因基本上是编译顺序导致的引用出错,也就是某些模块还没有编译完成,其他模块已经开始尝试链接,导致依赖错误,此时只要把多线程并发编译修改成单线程编译即可,即直接执行
1 |
$ make |
运行镜像
1 2 3 4 5 6 7 8 9 10 11 |
$ 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
的支持,则执行如下命令:
1 |
$ ./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 |
参考链接
- Requirements | Android Open Source Project
- Mac OSX 下如何便捷地在两个 Java 版本之间进行切换呢?机器上装了 Java6、Java7 和 Java8
- Mac 10.10 编译android 4.4.4 for nexus
- Build Android 5.1.1 on OSX 10.10 Yosemite With Xcode7
- Xcode 8 with older Base SDK
- Xcode 7.3 not able to use older SDKs
- phracker/MacOSX-SDKs
- Xcode - Support - AppleDeveloper
- libgcc: error: unknown value '10.10' of -mmacosx-version-min
- ibgcc-devel @5-20140824_1: error: unknown value '10.10' of -mmacosx-version-min
- Mac OS X 10.10.3下android-5.1.1_r9 源码下载与编译
- android编译源码生成emulator
- 使用HAXM 与 KVM 给emulator加速
- android大项目运行中出现问题汇总
Android查看SELinux状态及关闭SELinux
SELinux
是2.6
版本的Linux
内核中提供的强制访问控制 (MAC
)系统。对于目前可用的Linux
安全模块来说,SELinux
是功能最全面,而且测试最充分的,它是在20
年的MAC
研究基础上建立的。SELinux
在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。
selinux
默认配置在/etc/sysconfig/selinux
里
默认有三种级别
enforcing
级别:Linux
下selinux
所设置的安全策略都会被启用.所有与selinux
安全策略有关的服务或者程序都会被策略阻止.也就是,所有操作都会进行权限检查。
permissive
级别:Linux
下selinux
所设置的安全策略都会被启动,但是所有与selinux
安全策略有关的服务或者程序不会被策略阻止,但是会收到警告.也就是,所有操作都被允许(即没有MAC
),但是如果有违反权限的话,会记录日志
disabled
级别:关闭selinux
,相当于系统没有安装selinux
一样.
一般可以通过getenforce
查看selinux
的运行级别.也可以通过setenforce 0
或者1
设置selinux
的运行级别,级别0
表示Permissive
模式,级别1
表示Enforcing
模式. 至于disabled
模式和其他模式的切换只能修改配置文件,命令不起作用.其次,修改完成之后,必须重启系统才能够生效.
参考链接
ubuntu 16.04下载Android源代码
由于众所周知的原因,我们是没办法正常下载Android
的源代码的,因此只能使用国内的镜像来操作了。
1.安装repo
工具
1 |
$ sudo apt-get install repo |
2.在需要存储代码的地方创建文件夹
1 2 3 4 5 6 7 |
$ mkdir ~/Android_Source $ cd ~/Android_Source # 国内手工下载 repo 源代码,解决 “fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle” $ git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo .repo/repo |
3.使用镜像下载Android
源代码
omapzoom.org的镜像
1 |
$ repo init -u git://git.omapzoom.org/platform/manifest |
清华大学的镜像
1 |
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest |
上面执行之后是拉取全部的代码。
如果要使用某个特定分支的版本的源代码的话,则则初始化的时候指定分支,比如我想要Android 7.0.0_r21
的分支,则执行如下命令
1 |
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.0.0_r21 |
4.同步代码
1 |
$ repo sync -j4 |
5.列出全部分支
1 |
$ cd .repo/manifests && git branch -a | cut -d / -f 3 |
6.切换到指定分支
1 |
$ repo start Android_7.0.0_r21 7.0.0_r21 --all |
7.查看当前的分支
1 |
$ repo branches |
8.删除不用的本地分支
1 |
$ repo abandon Android_7.0.0_r21 |
参考链接
Android Studio 2.2 启用代码混淆
在新版本的Android Studio
中开启混淆的方法如下:
1 2 3 4 5 6 7 |
buildTypes { release { minifyEnabled true //是否混淆 shrinkResources true //是否去除无效的资源文件 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } |
具体解释一下minifyEnabled
用来影响是不是开启混淆,shrinkResources
只有在minifyEnabled
为true
的情况下,才能有效,用来去除无效的资源文件。proguard-android-optimize.txt
是Android SDK
->tools\proguard
目录下,Google
已经写好默认的混淆模板文件,其中的proguard-android.txt
默认没有配置代码优化,而proguard-android-optimize.txt
默认配置了代码优化,至于我们自己工程下面的proguard-rules.pro
文件,只要配置我们自定义的额外配置即可,其他的用默认配置即可。
顺便讲一下代码混淆的好处:
1.代码安全,不易理解,增加破解难度。
2.减小APK的体积,减少内存开销。
3.缩减类名,方法名的长度,减少CPU开销。
参考链接
Android Studio 混淆代码时提示 “Warning:org.apache.commons.httpclient.util.URIUtil: can't find referenced class org.apache.commons.codec.net.URLCodec”
Android
混淆代码时提示"Warning:org.apache.commons.httpclient.util.URIUtil: can't find referenced class org.apache.commons.codec.net.URLCodec
"
解决方法是proguard-rules.pro
中增加如下语句:
1 |
-dontwarn org.apache.commons.httpclient.** |
其他类似的警告信息,可以参考以上的方法,逐行添加即可。
参考链接
ProGuard error can't find superclass or interface org.apache.http.entity