-
Android7以上抓包HTTPS
2019-11-23 16:58:09目录前言准备阶段证书转换遇到问题...后来才发现原来Android9版本不信任用户的证书(在Android7以上都是)。 所以为了解决该问题 1、用Android6以下版本的手机抓包 。 2、把证书安装到系统里(需要ROOT)。 准备...前言
在问题解决之前试了各种方法,始终抓不到HTTPS的包,用魅蓝E2(Android6)安装了FD的证书后测试,没问题,用红米Note7(Android9)就不行。后来才发现原来Android9版本不信任用户的证书(在Android7以上都是)。
所以为了解决该问题
1、用Android6以下版本的手机抓包 。
2、把证书安装到系统里(需要ROOT)。准备阶段
- 首先需要安装openssl,点击下载
- 打开Fiddler,依次点击Tools–Options–HTTPS–Actions–Export Root Certificate to Desktop,证书就会导出到桌面。
证书转换
系统证书的目录是在/system/etc/security/cacerts中,可以看到文件都是以十六进制加.0结尾的,为了让系统信任该证书,就要转换成系统能识别的文件。
1、先把证书(FiddlerRoot.cer)复制到OpenSSL-Win32\bin里,然后在空白处按住SHIFT键,右键鼠标,选择“在此处打开命令窗口”。
2、在打开的命令行中粘贴并执行命令
openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer
3、会得到一个8位的十六进制串,然后再执行
openssl x509 -inform der -text -in FiddlerRoot.cer -out e5c3944b.0
能被系统识别的证书文件就出来了,然后再把它移动到系统证书目录/system/etc/security/cacerts中,重启手机。遇到问题
我重启手机后,发现HTTPS还是没有被成功解密,说明证书文件并没有成功被信任??
然后我用记事本打开了生成好的证书文件,发现是这样的
然后我在手机上随便打开了一个系统证书文件,发现是这样的
对比了文件的差别后,发现-----BEGIN CERTIFICATE-----开始到-----END CERTIFICATE-----应该在文件的最开头,但使用openssl生成的顺序相反,所以我手动把顺序调换了一下,替换原来的证书文件,再次重启手机。结果
果然,成功了,查看系统证书列表
没错了,就是它。再次打开FD进行抓包后,之前没有显示的HTTPS已经能显示了,当然,并不是所有的HTTPS都显示了,没有进行ssl-pinning的HTTPS都抓到了,这个问题我暂时还没解决,试了用太极+JustTrustMe不行,不知道是什么原因。 -
Android 7 新特性浅析
2016-06-27 14:31:15Android 7是谷歌推出的智能手机操作系统,代号为:AndroidN。谷歌2016年的I/O开发者大会在美西时间2016年5月18-20日召开,地点为山景城的Shoreline Ampitheatre圆形剧场,新版的Android N系统正式发布,作为android...Android 7是谷歌推出的智能手机操作系统,代号为:AndroidN。谷歌2016年的I/O开发者大会在美西时间2016年5月18-20日召开,地点为山景城的Shoreline Ampitheatre圆形剧场,新版的Android N系统正式发布,作为android 开发者还是得紧跟潮流,看一下android 7 有什么特性,这有助于开发出 更好的 应用。
Android N 与前面的系统相比主要是有以下四个新特性:
默认多窗口支持;
强化通知;
Java8 支持;
禁止Native 动态链接系统库
下面就分别说明一下每一个新特性:
一、默认多窗口支持
多窗口支持在Android M中已经存在,具体是系统允许再启动某个Activity时附带上特殊参数,该应用可以在最近任务窗口中和主应用分开显示。就是muti-tasking支持,但是Android N中不再需要传递特殊参数,默认就可以多窗口支持。这样就对App布局适配要求提高了(因为全屏时和分屏时activity所在区域有明显不同,如果用了相对布局,可能会在分屏时显示不全),这一个可能不算什么,但是下一个就很难再淡定了,Android N将支持分屏情况下drag and drop (Android 4.0就开始有的特性)。这意味着你可以将一个应用内,甚至不同应用间的分屏情况将一个分屏幕控件拖拽到另一个分屏幕。也许这个可以用来完成拖拽图片,然后快速发图。另外作为分屏的一种特殊形式,画中画(picture in picture)也得到相应支持。不过据google的工程师说,画中画模式主推Android TV中应用。不过无论如何,现在很多功能都可以通过浮窗接口实现。画中画对于做视频应用或者有视频支持功能的应用非常有帮助。
这里有两个点要注意:1、虽然分屏状态下两个应用都可见,但是对于非获取焦点状态的应用当前是处于OnStop状态的,也就是说,并没有实际在运行中。原本OnStop的应用应该是不可见的,但是现在可见了。2、虽然分屏状态下应用不会双倍地占用内存,但是内存占用肯定会比正常大,注意分屏模式下即时释放内存。注意对你程序进行适配。如果你已对多个尺寸进行适配,就可以不用过多留意适配问题。
二、强化通知
通知栏一直是android 引以为豪的方面,相对于IOS通知栏来说,android通知栏开放性实在没话说,自定义控件,自定义Action ,除了快速回复外基本都可自定义。现在Android通知栏已解决快速回复了,这个新特性简而言之就是为了满足快速回复的一切需求,当然了除了快速回复,还有根据应用归档通知,这也很有用的。还有Android N中去掉了三个广播,分别是:CONNECTIVITY_ACTION:网络变化 ACTION_NEW_PICTURE:添加新图片 ACTION_NEW_VIDEO:添加新视频 。这样的话原来很多应用都通过监听网络变化来处理不同功能,在android 7中 都 不能用了 。这时只能使用android 5提供的jobschedule来 完成了 。jobscheduel有很多好处,他会根据用户当前设备的情况比如当前ram,电量,模式,是否应用在前台等决定是否执行特定逻辑。
当然了,这里的去掉只是不允许静态注册监听广播,至于动态注册的不受影响。之所以去掉应该是从性能考虑。
三、禁止Native 动态链接系统库
从android 7开始,系统将禁止第三方应用so文件链接到系统lib库,包括但不限于李炳辰rypto.so,libandroidruntime.so,libicu.so,libbinder.so。动态链接上述库轻则弹出Toast提示,重则直接crash。这个新特性对于一般应用影响不会太大,但是对于那些在底层做了大量优化和调用的应用来说就让程序员伤脑筋了。至于解决办法暂时只想到改用静态链接(改变编译时的编译选项,由动态链接变静态链接会影响安装包大小)。
四、支持 java8新特性
Android 7开始支持java8的编译,前提是要在gradle文件中显式声明使用jack编译器。Jack编译器是一个将java文件先编译成class文件然后再编译成dex的一个整体编译器,不再需要手动一步一步编译,jack直接就可以完成。声明使用jack编译器后就可以支持java 8新特性了。但是android 7并没有将java 8新特性支持完整,只是支持了主流的新特性。包括:定义接口默认实现方法。Lamda表达式支持(一种新语法)。Stream接口。Repeatable annotations以及 method refrence(一种新语法)。对于这些新特性大家可能感觉很陌生,这里笔者转载了一篇关于java8新特性的博客,点击这里可以查看。如果有想看java7 的新特性的可以点击这里查看,java7都出了那么久了,如果还不知道它的新特性,那就愧对java 工程师的名字了。
注:有些新特性可能会有性能隐患,如lamda表达式本质上会生成匿名类。还有因为jack编译器不会产生.class中间文件,直接生成最终的dex文件。所以在.class上做trick的一些库或者项目可能会失效或者出问题。所以在使用之前,一定得好好测试,否则会出意外的。
-
是时候来了解android7了:多窗口支持
2016-08-22 01:17:59这篇文章开始, 我们来了解一下android 7的一些新特性, 话说今年android 7预览版本来的比以往都稍早一些, 这样对于我们开发者来说算是一个好消息, 我们可以有充足的时间来看新版android的一些特性, 让我们的应用更快...本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。
这篇文章开始, 我们来了解一下android 7的一些新特性, 话说今年android 7预览版本来的比以往都稍早一些, 这样对于我们开发者来说算是一个好消息, 我们可以有充足的时间来看新版android的一些特性, 让我们的应用更快的支持到android 7. 前段时间android 7发送了最终预览版本, 这也表示现在的sdk已经是最终的sdk了, 所以我们从现在开始, 完全可以让应用支持到android 7了.
今天的这篇文章我们来介绍一下在android 7上最为直观的一个特性-多窗口支持, 当然也可以叫他分屏模式. 有了这个特性妈妈再也不用担心我应用间切换的烦恼了, 那什么多窗口模式呢? 其实在很多国产机器上早就已经支持多窗口了, 只不过这次android 7标准化了多窗口模式, 这对我们开发者来说, 可以算是天大的好消息. 废话那么说, 我们还没看到多窗口模式什么样呢? 下面一张图来体验一下.
让我们的应用支持多窗口模式
如何让我们的应用支持多窗口模式呢? 其实android 7是默认开启多窗口模式的, 不过如果你用低于android 7的sdk构建的应用, 会在多窗口模式下发出一个警告. 那如何让我们的应用禁用多窗口模式呢? 毕竟好多人还是不喜欢让自己的应用和别人分享屏幕的(比如QQ), 这个也很简单, 只需要在清单文件的application或者activity中添加
android:resizeableActivity="false"
就ok了(目测, 接下来大多数国产APP中都会有这条属性).多窗口模式的一些配置
禁用归禁用, 但是对于我们开发者来说, 还是要继续了解一下多窗口模式的, 那接下来我们来看一下, 在多窗口模式中又会多哪些属性. 在清单文件中我们配置activity的地方, 又多了一个
layout
节点, 这个节点的属性不多, 主要是用来配置多窗口模式下的一些属性的. 下面我们首先来看看如何配置, 然后来说说都是什么作用:<activity android:name=".MyActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="500dp" android:gravity="bottom|end" android:minimalHeight="200dp" android:minimalWidth="200dp" /> </activity>
很简单,就是多了一个layout节点, 我们来看看他的属性.
android:defaultHeight
这条是配置多窗口模式下默认的高度.android:defaultWidth
这条是配置多窗口模式下默认的宽度.android:gravity
这条是配置多窗口模式下activity的初始位置. (注意:这条语句在我测试过程中发现貌似没起到作用)android:minimalHeight
这条是配置多窗口模式下最小的高度. (注意:这条语句在我测试过程中发现配置后直接编译不了)android:minimalWidth
这条是配置多窗口模式下最小的宽度. (注意:这条语句在我测试过程中发现配置后直接编译不了)
其实, 就算我们的应用要支持多窗口模式, 上面的
layout
节点我们也是完全可以忽略的(而且我感觉大部分情况下是要忽略的)还是看看生命周期
其实, 多窗口本身还是很简单的, 我们最关心的还是activity在多窗口模式下的生命周期, 下面我们就用一段demo来看一下在多窗口模式下activity的生命周期.
@Override protected void onCreate(Bundle savedInstanceState) { prntLog("onCreate"); } @Override protected void onStart() { prntLog("onStart"); super.onStart(); } @Override protected void onResume() { prntLog("onResume"); super.onResume(); } @Override protected void onPause() { prntLog("onPause"); super.onPause(); } @Override protected void onStop() { prntLog("onStop"); super.onStop(); } @Override protected void onDestroy() { prntLog("onDestory"); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { prntLog("onSaveInstanceState"); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { prntLog("onRestoreInstanceState"); super.onRestoreInstanceState(savedInstanceState); } @Override public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { prntLog("onMultiWindowModeChanged:" + isInMultiWindowMode); prntLog("isInMultiWindowMode:" + isInMultiWindowMode()); super.onMultiWindowModeChanged(isInMultiWindowMode); } private void prntLog(String log) { Log.d("MainActivity", log); }
在开始之前, 我们发现有一个回调
onMultiWindowModeChanged
是我们不太熟悉的, 这个回调是为了多窗口模式新增的一个, 在进入或者退出多窗口模式, 这个回调会执行, 而且, 我们还可以用过isInMultiWindowMode()
方法来判断当前activity是否在多窗口模式下. 接下来, 我们来演示一下生命周期吧.首先是进入多窗口模式(进入多窗口模式的方法是长按手机上的overview键)
D/MainActivity: onMultiWindowModeChanged:true D/MainActivity: isInMultiWindowMode:true D/MainActivity: onPause D/MainActivity: onSaveInstanceState D/MainActivity: onStop D/MainActivity: onDestory D/MainActivity: onCreate D/MainActivity: onStart D/MainActivity: onRestoreInstanceState D/MainActivity: onResume D/MainActivity: onPause
从log中可以发现, 在进入多窗口模式时, 首先回调的是
onMultiWindowModeChanged
方法, 然后很令人沮丧的是我们的activity销毁了,并且调用了onSaveInstanceState
方法, 然后activit启动, 其实就是我们activity重启了.那退出多窗口模式呢?
D/MainActivity: onSaveInstanceState D/MainActivity: onStop D/MainActivity: onDestory D/MainActivity: onCreate D/MainActivity: onStart D/MainActivity: onRestoreInstanceState D/MainActivity: onResume D/MainActivity: onPause D/MainActivity: onMultiWindowModeChanged:false D/MainActivity: isInMultiWindowMode:false D/MainActivity: onResume
首先是一个配置变化销毁的过程, 然后是一个恢复的过程, 并且回调了
onMultiWindowModeChanged
方法, 此时的isInMultiWindowMode
是false.继续看生命周期, 如果我们的焦点从一个activity中切换到了和它同处于多窗口模式下的另外一个activity呢?
D/MainActivity: onPause D/SecondActivity: onResume
此时当前activity会暂停, 新获取角度的activity回调
onResume
, 在这里官网还有一个notice, 比如我们之前是在onPause
中暂停视频播放, 在这种情况下, 失去焦点后就暂停了, 显然这不是很好的用户体验, 我们需要把视频的暂停和继续放到onStop
和onStart
中.启动activity
现在我们在来学习下如何在多窗口模式下启动activity. 这样分两种情况了, 一种在是当前栈中启动, 另一种是在新的栈中启动.
对于第一种情况, 很简单, 就是在当前窗口中启动新的activity, 而第二种情况, 我们可以指定在同级窗口下启动, 只需要给intent设置一个FLAG_ACTIVITY_LAUNCH_ADJACENT
flag就ok.
例如下面的代码:Intent intent = new Intent(this, SecondActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
上面的代码我们会在另外一个窗口启动新的activity
另外, 我们还可以制定新启动的activity的大小.
Rect bounds = new Rect(500, 300, 100, 0); ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchBounds(bounds); Intent intent = new Intent(this, SecondActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK); ActivityCompat.startActivity(this, intent, options.toBundle());
跨activity拖拽
从android 4.0开始, android就已经支持activity内的内容拖拽了, 现在在多窗口模式下, android增强了拖拽功能, 另它在多窗口模式下可以在activity间实现内容的拖拽, 不过在activity间也仅限于内容的拖拽, 对view的跨activity拖拽还是不可以的. 现在我们在MainActivity和SecondActivity之前来模拟一下跨activity拖拽内容.
// MainActivity Button view = (Button) findViewById(R.id.button); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { ClipData data = ClipData.newPlainText(view.getClass().getName(), ((Button) view).getText()); View.DragShadowBuilder builder = new View.DragShadowBuilder(view); view.startDragAndDrop(data, builder, view, View.DRAG_FLAG_GLOBAL); return true; } });
这里我们监听button的长按事件, 在长按事件中, 首先我们用button的文本构建一个
ClipData
对象. 然后调用view.startDragAndDrop
方法来启动拖拽. 这里要注意一下最后一个参数View.DRAG_FLAG_GLOBAL
, 这个flag表示我们可以跨activity进行拖拽.接着我们来看看SecondActivity如何处理拖拽事件.
final TextView content = (TextView) findViewById(R.id.content); findViewById(R.id.container).setOnDragListener(new View.OnDragListener() { @Override public boolean onDrag(View view, DragEvent dragEvent) { switch (dragEvent.getAction()) { case DragEvent.ACTION_DRAG_STARTED: prntLog("drag started"); break; case DragEvent.ACTION_DRAG_ENTERED: prntLog("drag entered"); break; case DragEvent.ACTION_DROP: ClipData.Item item = dragEvent.getClipData().getItemAt(0); content.setText(item.getText()); break; case DragEvent.ACTION_DRAG_ENDED: prntLog("drag entered"); break; } return true; } });
这里首先我们拿到根布局(这里就先不要纠结根布局到底是谁了, 这里的根布局指的是content_view的根布局), 然后给它设置
OnDragListener
的监听, 在ACTION_DROP
时候我们通过dragEvent.getClipData().getItemAt(0)
拿到拖拽的item, 然后通过getText()
方法获取到内容, 并且设置到TextView
上显示.
来看看效果:ok, 到现在为止android 7的多窗口模式我们就介绍完了, 这些内容大家有点印象就可以, 毕竟在我们日常的工作中基本一个
android:resizeableActivity="false"
就可以了. -
Windows平台上Android Studio上编译Google的Android7源码中的Settings
2016-10-12 11:39:44Android7源码中的Settings的编译,先是在eclipse上编译,后来移植到Android Studio上,发现Android Studio上编译更加方便、快捷。此文档只用来记录编译过程中的关键点,不是编译完整攻略,相信其他源码中工程的编译...Android7源码中的Settings的编译,先是在eclipse上编译,后来移植到Android Studio上,发现Android Studio上编译更加方便、快捷。此文档只用来记录编译过程中的关键点,不是编译完整攻略,相信其他源码中工程的编译都可以参考这个文档。
首先、分析编译指南Android.mk
Android.mk参考:http://blog.sina.com.cn/s/blog_602f8770010148ce.htmlLOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common LOCAL_STATIC_JAVA_LIBRARIES := \ android-support-v4 \ android-support-v13 \ android-support-v7-recyclerview \ android-support-v7-preference \ android-support-v7-appcompat \ android-support-v14-preference \ jsr305 LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ src/com/android/settings/EventLogTags.logtags LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ frameworks/support/v7/preference/res \ frameworks/support/v14/preference/res \ frameworks/support/v7/appcompat/res \ frameworks/support/v7/recyclerview/res LOCAL_PACKAGE_NAME := Settings LOCAL_CERTIFICATE := platform LOCAL_PRIVILEGED_MODULE := true LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_AAPT_FLAGS := --auto-add-overlay \ --extra-packages android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview ifneq ($(INCREMENTAL_BUILDS),) LOCAL_PROGUARD_ENABLED := disabled LOCAL_JACK_ENABLED := incremental LOCAL_DX_FLAGS := --multi-dex LOCAL_JACK_FLAGS := --multi-dex native endif include frameworks/opt/setupwizard/library/common-full-support.mk include frameworks/base/packages/SettingsLib/common.mk include $(BUILD_PACKAGE) # Use the following include to make our test apk. ifeq (,$(ONE_SHOT_MAKEFILE)) include $(call all-makefiles-under,$(LOCAL_PATH)) endif
自上而下分析mk文件
LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common
这部分需要从编译好的源码out目录中找到相应jar包,如何得到这些jar包参考
http://blog.csdn.net/qq690197664/article/details/18223495include frameworks/opt/setupwizard/library/common-full-support.mk include frameworks/base/packages/SettingsLib/common.mk
include 字段的内容,这段说的是编译需要引用的源文件,找到相应的mk文件所在位置,拷贝出相应源码编译作为lib引用到主工程即可。
未完待续…
-
Android v7包Toolbar的高度修改
2016-01-29 06:58:58Android v7包Toolbar的高度我想自己定义一个值,但是改变高度之后,menu菜单的图标位置都变得不再垂直居中显示。我查了好多资料ToolBar的高度都写的是"?attr/actionBarSize"(默认值56dp),但是感觉高度占得比重太... -
是时候来了解android7了:通知直接回复
2016-12-26 00:37:19这是<是时候来了解android7>系列的第三篇文章了, 前面两篇分别介绍了多窗口模式和shortcut功能, 今天我们来点简单的, 说一说通知直接回复功能. 可能很多朋友还没有机会接触到android7的新特性, 所以在开始之前,先来... -
cordova学习之四调用android7摄像头闪退问题
2017-06-22 11:01:17android7调用摄像头闪退问题 -
给Android7及以上的手机安装系统级证书,实现Fiddler或者其他程序的HTTPS的抓包
2019-10-30 09:45:28Android7以后,系统不再信任用户级的证书,只信任系统级的证书,所以要抓包就需要把我们的代理程序证书安装至Android的系统目录中 准备 一台已root的手机 Openssl 证书生成 将Filddler或者其他抓包程序的证书... -
关于Android7.x系统Toast显示异常BadTokenException解决方案
2018-06-19 19:36:52关于Android7.x系统Toast显示异常BadTokenException解决方案 BadTokenException详细及原因 Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.... -
Android 7以后系统不发出Intent.ACTION_DATE_CHANGED广播。
2018-09-25 13:50:48在android7以前的虚拟机上日期改变使用adb shell “dumpsys|grep BroadcastRecord”可以看到系统发出的广播,在7以及更高的版本上接收不到这个广播了,网上也没说这个广播弃用了啊。 -
Android 7 强势来袭开发者们不得不知道的细节
2016-08-23 11:33:48今天我们来了解下前段时间已经发布的Android 7的一些新的特性,当然既然已经发布,那么也就是说我们应该尽快让我们的应用支持Android 7的新特性,让我们来看看Android 7有哪些值得关注的点吧! Google发现,在多... -
解决Android7.x找不到libsqlite.so 问题
2017-01-19 16:08:31解决Android7.x找不到libsqlite.so 问题 TargetSdkVersion 为24时,找不到libsqlite.so,导致App直接崩溃。 原因:一般某些聊天的SDK都依赖于libsqlite.so(环信、融云),不过由于这个包从来没有变化,使用的是... -
python3 appium1.7.2 安装uiautomator2解决android7 无法定位的问题
2018-04-11 16:56:09为什么用2 因为手机是android 7 在原生界面找不到元素 driver,page_source 一直处于状态, 我也不想这么玩,搭建appium已经煞费苦心,没法 继续试试首先 npm install appium-uiautomator2-driver 目前装的是最新版... -
细数Android5.0到Android7.X 多媒体技术新特性
2017-04-28 16:23:26Android 5.0 行为变更媒体播放如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义 RemoteViews.RemoteView 对象。无论您选择使用哪个方法,请务必将通知的... -
IPerf3 for Android 7
2018-06-04 20:04:32在IPerf的官网上有IPerf3对应的Android 版本可以下载(https://iperf.fr/iperf-download.php),是在Google的源代码库中,但Google被天朝伟大的Great Firewall of China给屏蔽了,不如自己动手编译一个试试。... -
android7.x Launcher3源码解析(2)---框架结构
2017-04-10 15:26:23一、android7.x Launcher3源码解析(1)—启动流程 二、android7.x Launcher3源码解析(2)—框架结构上一篇粗略的讲了下Launcher的启动流程,主要是讲了如何启动到Launcher的,Launcher启动后的那些流程,打算讲完... -
在使用ActionBarActivity和AppCompatActivity时,对应的android v7包的版本
2015-06-13 21:55:45在使用ActionBarActivity和AppCompatActivity时,对应的android v7包的版本,今天就行了android studio 的升级,升级后建立activity时,继承的父类activity不在是ActionBarActivity而是AppCompatActivity,但是建立... -
android7 恢复出厂设置后一直正在检查网络连接开不了机
2018-01-11 15:02:22android7 恢复出厂设置后一直正在检查网络连接开不了机 现象:刷原生系统后,恢复出厂设置后一直正在检查网络连接开不了机 问题:粗心! 解决办法 1.不要连wifi 2. 选择网络连接,或下一步时,往下拉 3.都选择... -
Android 7 调用系统相机
2017-01-12 21:48:46Android M相比6.0以前的需要权限,其他的跟之前的没区别: if ((ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)|| (ContextCompat.... -
android v7兼容包RecyclerView的使用(三)——布局管理器的使用
2015-03-12 13:19:37android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的基本用法以及与它相关的重要的几个类,本篇文章介绍布局管理器的具体用法。为了演示布局管理器的使用,... -
android 7 JobScheduler实现APP保活
2018-05-21 09:57:41JobScheduler:当一系列预置的条件被满足时,JobScheduler API为你的应用执行一个操作,例如当设备接通电源适配器或者连接到WIFI,在API 21 ( Android 5.0(Lollipop) )中,google提供了一个新叫做JobScheduler API的... -
【Arch】Android 7 Nougat源码目录结构分析
2017-03-22 20:40:20|- art // Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性,包括以下几个目录。 |- benchmark // 程序测试基准。 |- build // 编译文件。 |- cmdline // 命令行... -
android v7包CardView让你的列表更立体
2017-12-13 11:31:22CardView是Android 5.0之后发布的卡片效果控件,包:android.support.v7.widget.CardView 效果:可以实现圆角效果、阴影效果、让你的ui更立体。 列表适配器布局文件: <android.support.v7.... -
Android7及以上远程更新apk新操作
2019-02-22 17:35:22uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /&gt; 2、在AndroidManifest.xml中添加 &lt;provider android:name="android.... -
Android 7.x 安装Xposed框架
2018-04-04 14:30:07目录 目录 简介&下载地址 具体刷入操作 ...简介就不写了吧,但是注意以下...我的手机是华为P9,Android7.0系统。 进入官网后仔细阅读,上面5.0以上和4.x版本用的xposed是不一样的。5.0以上点击5.0以上的... -
android v7包 正常导入使用方法
2014-07-30 16:14:13最近手头有项目正好要用到 android的 support v7包,里面的 actionbar 很是吸引人,然后网上就查了很多的资料,一大堆的文章包括E文,然后动手开始弄,导入 \sdk\extras\android\support\v7\appcompat 进入 eclipse... -
是时候来了解android7了:shortcuts(快捷方式)
2016-10-21 00:33:34不过还好Google并没有对这一干一亲区别对待, 这不, 今天就推送了android7.1.1的更新, 随之而来的又是一大波新特性(又有我们开发者忙的了…), 这其中一个叫作Shortcuts的功能真的是太赞了, 利用这个功能以后我们就... -
适配android 7的自定义相机的预览及拍照
2017-02-06 18:34:53import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import an -
android7新特性之 support library 25.0.0
2016-10-22 15:02:21前言转眼间2016年还有两个月就完事了,Android移动开发也已经走过了第八个年头了。伴随着Android 7.1(API 25.0.0)的发布,一系列开发相关的开发工具和类库也一起更新了,今天我们就简单的说说Support Library ...
-
SubstancePainter插件开发-基础入门
-
【老孟Flutter】如何提高Flutter应用程序的性能
-
前端性能优化
-
CentOS7_64 位操作系统模板搭建
-
易语言子程序的调用.e
-
基于X210的裸机时钟温度显示器-第3/3季
-
FFmpeg4.3黄金系列课程:c++版
-
2021-01-21
-
215. 数组中的第K个最大元素 ( 基于快排的选择算法 )
-
基于FPGA的滤波器的课程设计与烧录仿真
-
【数据分析实战训练营】Hive详解
-
876. 链表的中间结点
-
中文说明worldserver.conf
-
java-maven
-
MySql的初学习 -- 第五章 -- 了解约束
-
如何解决使用mybatis-plus提供的多租户插件出现Column ‘tenant_id‘ specified twice问题
-
【数据分析-随到随学】Hive详解
-
webots_ros2.zip
-
基于 C# 的 GIS 近海环境管理系统
-
7-200 SMART样本.pdf