`
文章列表
在build.gradle文件中再次配置下,打开混淆文件: release { 3 // 下面各值的意思将在后续进行讲解 4 storeFile file('release.keystore') 5 storePassword "123456" 6 keyAlias "androiddebugkey" 7 keyPassword "123456" 8 } 9 ...
最近一直用android studio 进行开发,在开发和发版的时候,遇到一个多渠道打包的问题,由于公司里是有七个渠道的包进行分发,由于每次去AndroidManifest.xml修改渠道的值,甚是麻烦。。。 最后去google了一番,发现有些方法,是在gradle文件里切换各种不同的AndroidManifest.xml文件,感觉这样也太麻烦些了。。。后面搜索了些,发些大家写得都差不多,发现一个在gradle利用manifestPlaceholders这个属性来替换渠道值的方法,但我按照这个方法,没有成功,我就去扒官方的文档才彻底搞定。下面就讲讲怎么实现的吧。 一般用渠道的统计无非是用友 ...

%1$s %1$d string

<string name="time">我的时间:&#160;%1$s</string>   String times= getResources().getString(R.string.time); String sFinalAge = String.format(times, "xx年xx月");   也可简单写成: %d   (表示整数) %f    (表示浮点数) %s   (表示字符串)
遍历手机应用市场  ps:不一定显示齐全 Intent intent = new Intent();   intent.setAction("android.intent.action.MAIN");   intent.addCategory("android.intent.category.APP_MARKET");   PackageManager pm = this.getPackageManager();   List<ResolveInfo> infos = pm.queryIntentActivities(intent ...
如果使用Xcode 4.5来新建项目,默认是支持AutoLayout的,但是AutoLayout是iOS 6的新特性,如果在iOS 5的simulator上运行程序,会出现Could not instantiate class named NSLayoutConstraint问题。解决方法是打开storyboard文件,去掉AutoLayout的选择。     转自:http://www.cnblogs.com/procoder/archive/2013/01/13/Could-not-instantiate-class-named-NSLayoutConstraint.html   ...
android4.0时候提示 android.os.NetworkOnMainThreadException异常,在2.3以下无 在appliction里添加  int fv =android.os.Build.VERSION.SDK_INT; if (fv>10) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detect ...
  public class TextViewLinkActivity extends Activity { TextView myTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myTextView = (TextView) this.findView ...
vi的基本操作 a) 进入vi   在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:    $ vi myfile   不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mo ...
tabHost 的tab下有白线,去白线   tabHost = getTabHost();        /* 去除标签下方的白线 */       tabHost.setPadding(tabHost.getPaddingLeft(),                tabHost.getPaddingTop(), tabHost.getPaddingRight(),                tabHost.getPaddingBottom() - 4);
获取屏宽高及密度   DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏幕宽度(像素) int height = metric.heightPixels; // 屏幕高度(像素) float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1 ...
(1)Android是一个多任务系统,也就是说可以同时运行多个程序,这个大家应该很熟悉。一般来说,启动运行一个程序是有一定的时间开销的,因此为了加快运行速度,当你退出一个程序时,Android并不会立即杀掉它,这样下次再运行该程序时,可以很快的启动。随着系统中保留的程序越来越多,内存肯定会出现不足,这个时候Android系统开始挥舞屠刀杀程序。这里就有一个很明显的问题,杀谁?(2)Android系统中杀程序的这个刽子手被称作"LowMemory Killer",它是在Linux内核中实现的。这里它实现了一个机制,由程序的重要性来决定杀谁。通俗来说,谁不干活,先杀谁。And ...
Android Low Memory Killer介绍基本原理:Android的Low Memory Killer是在标准linux kernel的OOM基础上修改而来的一种内存管理机制,当系统内存不足时,杀死Bad进程释放其内存。Bad进程的选择标准有两个:oom_adj和占用内存的大小。oom_adj代表进程的优先级,数值越大,优先级越高,对应每个oom_adj都有一个空闲内存的阈值。Android Kernel每隔一段时间会检查当前空闲内存是否低于某个阈值,如果是,则杀死oom_adj最大的Bad进程,如果有两个以上Bad进程oom_adj相同,则杀死其中占用内存最多的进程。  Low ...
应用程序名字,能跟着我们软件中指定的环境走,而不受手机本身的语言环境影响 设置好默认的语言,比如locale,需要重载函数onConfigurationChanged,这个函数在系统语言改变的时候会被调用,在函数里把语言设置成默认的,这样就不会随系统改变了: private Locale locale = new Locale("en"); @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(new ...
本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。     BASE64编码算法不算是真正的加密算法。     MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。 BASE64 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrar ...
Global site tag (gtag.js) - Google Analytics