Android静默安装软件app代码(测试可用)
android手机在获得root权限之后,可以调用命令的方式静默安装软件,这一点体验是很不错,但是目前网络上关于android静默安装app的代码均出自一人之手,其中有一个非常sb的bug,借用代码的人居然都没有发现,导致网络上几乎所有关于android app静默安装的代码都是错误的。
代码如下 | 复制代码 |
new Thread() { |
这个代码实际上也可以运行起来,在root的手机中,也可以静默安装成功,但是代码有问题就是bug,不知道哪一天这个有问题的代码就会出现错误
下面是修改之后的代码,修改了上面的bug
代码如下 | 复制代码 |
new Thread() { |
修改的地方就在于从输出流中读取输出数据,可以看出如果输出的数据大于缓存区大小(256),就会导致安装后的操作多次执行,上面这段错误的代码之所以可以运行,是在于输出流的输出为Success ,小于256,但是如果运行指令出错,返回一大推的错误,那么上面的那一段将读取所有的数据,读逐一进行比较。
下文给各位整理了一些Android开发简要编码规则详解,希望能帮助到大家。请使用 UTF-8 格式来查看代码,避免出现中文乱码。
至于注释应该使用中文还是英文,请自己行决定,根据公司或项目的要求而定,推荐使用英文。
1. 整理代码
1.1. Java 代码中不允许出现警告,无法消除的警告要用 @SuppressWarnings。
1.2. 去掉无用的包、方法、变量等,减少僵尸代码。
1.3. 使用 Lint 工具来查看并消除警告和错误。
1.4. 使用 Ctrl+Shift+F 来格式化代码,然后再进行调整。
1.5. 使用 Ctrl+Shift+O 来格式化 Import 包。
2. 命名规则
2.1. 基本原则
2.1.1. 变量,方法,类命名要表义,严格禁止使用 name1, name2 等命名。
2.1.2. 命名不能太长,适当使用简写或缩写。(最好不要超过 25 个字母)
2.1.3. 方法名以小写字母开始,以后每个单词首字母大写。
2.1.4. 避免使用相似或者仅在大小写上有区别的名字。
2.1.5. 避免使用数字,但可用 2 代替 to,用 4 代替 for 等,如 go2Clean。
2.2. 类、接口
2.2.1. 所有单词首字母都大写。使用能确切反映该类、接口含义、功能等的词。一般采用名词。
2.2.2. 接口带 I 前缀,或able, ible, er等后缀。如ISeriable。
2.3. 字段、常量
2.3.1. 成员变量以 m 开头,静态变量以 s 开头,如 mUserName, sInstance。
2.3.2. 常量全部大写,在词与词之前用下划线连接,如 MAX_NUMBER。
2.3.3. 代码中禁止使用硬编码,把一些数字或字符串定义成常用量。
2.3.4. 对于废弃不用的函数,为了保持兼容性,通常添加 @Deprecated
3. 注释
请参考 下面示例类的注释。
4. Class 内部顺序和逻辑
4.1. 每个 class 都应该按照一定的逻辑结构来排列基成员变量、方法、内部类等, 从而达到良好的可读性。
4.2. 总体上来说,要按照先 public, 后 protected, 最后 private, 函数的排布 也应该有一个逻辑的先后顺序,由重到轻。
4.3. 以下顺序可供参考:
定义TAG,一般为 private(可选)
定义 public 常量
定义 protected 常量、内部类
定义 private 变量
定义 public 方法
定义 protected 方法
定义 private 方法
5. 表达式与语句
5.1. 基本原则:采用紧凑型风格来编写代码
5.2. 细则请参见示例类CodingRuler
代码如下 | 复制代码 |
/** * 文件名(可选),如 xxx.java * * 版本信息(可选),如:@version 1.0.0 * * 版权申明(开源代码一般都需要添加),如:Copyright (C) 2010-2014 xxx Corporation. */ package com.ntes.ruler; /** * 类的大体描述放在这里。 * * * @author 作者名 * @since 2014-XX-XX */ @SuppressWarnings("unused") public class CodingRuler { /** 公有的常量注释 */ public static final String ACTION_MAIN = "android.intent.action.MAIN"; /** 私有的常量注释(同类型的常量可以分块并紧凑定义) */ private static final int MSG_AUTH_NONE = 0; private static final int MSG_AUTH_SUCCESS = 1; private static final int MSG_AUTH_FAILED = 2; /** 保护的成员变量注释 */ protected Object mObject0; /** 私有的成员变量 mObject1 注释(同类型的成员变量可以分块并紧凑定义) */ private Object mObject1; /** 私有的成员变量 mObject2 注释 */ private Object mObject2; /** 私有的成员变量 mObject3 注释 */ private Object mObject3; /** * 对于注释多于一行的,采用这种方式来 定义该变量 */ private Object mObject4; /** * 公有方法描述... * * @param param1 * 参数1描述... * @param param2 * 参数2描述... * @param paramXX * 参数XX描述... (注意:请将参数、描述都对齐) */ public void doSomething(int param1, float param2, String paramXX) { // 以下注释标签可以通过Eclipse内置的Task插件看到 // TODO 使用TODO来标记代码,说明标识处有功能代码待编写 // FIXME 使用FIXME来标记代码,说明标识处代码需要修正,甚至代码是 // 错误的,不能工作,需要修复 // XXX 使用XXX来标记代码,说明标识处代码虽然实现了功能,但是实现 // 的方法有待商榷,希望将来能改进 } /** * 保护方法描述... */ @Deprecated protected void doSomething() { // ...implementation } /** * 私有方法描述... * * @param param1 * 参数1描述... * @param param2 * 参数2描述... */ private void doSomethingInternal(int param1, float param2) { // ...implementation } /** * 条件表达式原则。 */ private void conditionFun() { boolean condition1 = true; boolean condition2 = false; boolean condition3 = false; boolean condition4 = false; boolean condition5 = false; boolean condition6 = false; // 原则: 1. 所有 if 语句必须用 {} 包括起来,即便只有一句,禁止使用不带{}的语句 // 2. 在含有多种运算符的表达式中,使用圆括号来避免运算符优先级问题 // 3. 判断条件很多时,请将其它条件换行 if (condition1) { // ...implementation } if (condition1) { // ...implementation } else { // ...implementation } if (condition1) /* 禁止使用不带{}的语句 */ condition3 = true; if ((condition1 == condition2) || (condition3 == condition4) || (condition5 == condition6)) { } } /** * Switch语句原则。 */ private void switchFun() { // 原则: 1. switch 语句中,break 与下一条 case 之间,空一行 // 2. 对于不需要 break 语句的,请使用 /* Falls through */来标注 // 3. 请默认写上 default 语句,保持完整性 int code = MSG_AUTH_SUCCESS; switch (code) { case MSG_AUTH_SUCCESS: break; case MSG_AUTH_FAILED: break; case MSG_AUTH_NONE: /* Falls through */ default: break; } } /** * 循环表达式。 */ private void circulationFun() { // 原则: 1. 尽量使用for each语句代替原始的for语句 // 2. 循环中必须有终止循环的条件或语句,避免死循环 // 3. 循环要尽可能的短, 把长循环的内容抽取到方法中去 // 4. 嵌套层数不应超过3层, 要让循环清晰可读 int array[] = { 1, 2, 3, 4, 5 }; for (int data : array) { // ...implementation } int length = array.length; for (int ix = 0; ix < length; ix++) { // ...implementation } boolean condition = true; while (condition) { // ...implementation } do { // ...implementation } while (condition); } /** * 异常捕获原则。 */ private void exceptionFun() { // 原则: 1. 捕捉异常是为了处理它,通常在异常catch块中输出异常信息。 // 2. 资源释放的工作,可以放到 finally 块部分去做。如关闭 Cursor 等。 try { // ...implementation } catch (Exception e) { e.printStackTrace(); } finally { } } /** * 其它原则(整理中...)。 */ private void otherFun() { // TODO } } |
无觅相关文章插件,快速提升流量
iPhone6 plus来电闪光灯怎么设置呢,这个来电闪光灯功能默认是没有开启了,只有我们打开它之后才有这个功能,此功能也是非常的个性化的哦,下面一聚教程小编就为各位果粉介绍一下iPhone6 plus来电闪光灯设置方法吧。
好了到这里iPhone6 plus开关来电闪光灯教程就介绍到这里了,希望能帮助到各位。
在我安装、配置好PhoneGap项目的所有依赖后,试图执行
$ cordova run android
命令时,出现过如下错误。
Error: /home/sam/front/redwine/platforms/android/cordova/run: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:743:16)
at Process.ChildProcess._handle.onexit (child_process.js:810:5)
view rawphonegapError hosted with ❤ by GitHub
cordova build android或cordova emulate android的结果也是一样。
但其实真正的问题在上面几行:
[aapt] (skipping file '.jshintrc' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] (skipping file '.bower.json' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] (skipping file '.directory' due to ANDROID_AAPT_IGNORE pattern '.*')
[aapt] Unable to add '/home/sam/front/redwine/platforms/android/assets/www/bower_components/jquery-mobile/node_modules/grunt-bowercopy/node_modules/bower/node_modules/semver/semver.browser.js.gz': file already in archive (try '-u'?)
[aapt] ERROR: unable to process assets while packaging '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_'
[aapt] ERROR: packaging of '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_' failed
BUILD FAILED
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:932: The following error occurred while executing this line:
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:950: null returned: 1
view rawphonegapError2 hosted with ❤ by GitHub
这是因为项目下有多个node_modules目录,被重复打包而引发的Command failed with exit code 8问题。
解决办法是修改platforms/android/build.xml:
<property name="aapt.ignore.assets" value="<dir>node_*" />
将node_modules目录排除掉,就可以正常执行cordova命令。
下面一起来看一个关于wpf使用WPFMediaKit调用平板(surface2)摄像头拍照,希望例子能给各位同学带来帮助哦。wpf中怎么调用surface(或者其他平板)的摄像头进行拍照那?今天分享一下使用WPFMediaKit调用平板(surface2)摄像头拍照。
下载最新的代码,加入到项目中。
2、test项目引用WPFMediaKit
xaml代码:
代码如下 | 复制代码 |
<Window x:Class="test.WPFMediaKitWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfmedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" Title="WPFMediaKitWindow" Loaded="Window_Loaded"WindowState="Maximized"> <Grid> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal"> <ComboBox Name="cb" SelectionChanged="cb_SelectionChanged" Width="100" /> <Button Content="打开摄像头" x:Name="btnOpen" Click="btnOpen_Click"Width="100"/> <Button Content="拍照" x:Name="btnCapture" Click="btnCapture_Click"Width="100" /> <Button Content="保存" x:Name="btnSave" Click="btnSave_Click" Width="100" /> </StackPanel> <wpfmedia:VideoCaptureElement Name="vce" /> </StackPanel> </Grid> </Window> |
后台代码:
获取摄像头:
代码如下 | 复制代码 |
private void cameraOpen() { cb.ItemsSource = MultimediaUtil.VideoInputNames; if (MultimediaUtil.VideoInputNames.Length > 1) { cb.SelectedIndex = 1; } else { cb.SelectedIndex = 0; } } |
拍照保存到硬盘:win8注意有文件夹的权限问题
代码如下 | 复制代码 |
|
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- 这篇文章主要介绍了解决@SpringBootTest 单元测试遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-14
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31