1. 安卓指令加签加固流程
加固
360加固 适用于大部分
腾讯相关市场如果在提交360加固后的包提示加固不完整,则再使用腾讯应用宝中的推荐加固方式加固
360加固之后重新签名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystore文件路径] -storepass [keystore文件密码] [待签名apk] [keystore文件别名]
将[]中的描述替换成keystore文件的具体信息
2.安卓生成apk (以Android Studio为例)
Build -> Generate Signed APK
如果想要安装apk,不管是模拟器还是真机,都是需要签名的,只不过安装到模拟器的时候,Android Studio默认帮我们加签过了
如果你是第一次生成apk,点击之后会让你生成一个keystore(类似iOS打包中的CA证书)
然后根据自己实际情况,创建一个keystore文件,并保存好Master password,key store path, key store password, Alias、Alias password 用以以后生成时候使用
Master password: 第一次点击Generate Signed APK的时候,会让你设置,以后点击的时候,会让你填写认证,认证过才可以后续操作,相当于登录主密码
key store path: key store存储路径
key store password: key store 密码
Alias: 别名
Alias password: 别名密码
跟iOS只要Bundle id不变不同,安卓要在此基础上,再多一层保障,必须使用同一个keystore加签,然后加固上架之后,市场里才会认定未同一个应用
3. 获取已安装apk应用签名
这里下载最后面的签名生成工具,然后装到装有要获取签名的模拟器或真机运行即可!
4. Android studio设置按键代码提示(类似eclipse alt + /)
- 打开Android studio
设置
,搜索keymap
- 在
keymap
弹出的框里搜索class name completion
- 设置成你想要设置的快捷键就行了
5. 安卓使用webview加载带有JavaScript的网页
如果项目中有要使用webview加载url来实现页面与功能的。因为前端代码中存在js代码,而且要与用户存在一定的交互,所以,webview这里有有一些问题了。(安卓的webview,是以展示静态页面为主的!)
当然, 我们也可以做些配置来让它支持JS:
mWebView = (WebView) findViewById(R.id.rootWebview);
WebSettings settings = mWebView.getSettings();
//设置允许js
settings.setJavaScriptEnabled(true);
//允许js代码打开别的窗口
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setAllowContentAccess(true);
settings.setAppCacheEnabled(false);
settings.setBuiltInZoomControls(false);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
mWebView.setWebViewClient(new MyWebViewClient());
//这里强调一下,如果要实现与js代码中弹框之类的交互,那么必须加上此代码
//这里new了一个WebChromeClient对象,没有重写任何方法,使用默认配置就可以。
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.loadUrl(webviewUrl);
个人就是因为没有设置WebChromeClient
而导致点击webview的页面中的按钮而无法执行JavaScript方法。
6. webview中使用Toast提示消息报错:Can't create handler inside thread that has not called Looper.prepare()
//默认写法
Toast.makeText(getApplicationContext(), "默认Toast样式", Toast.LENGTH_SHORT).show();
然后运行之后报错:Can't create handler inside thread that has not called Looper.prepare()
解决方法:
在Toast.makeText().show()方法前面添加Looper.prepare();
在Toast.makeText().Show()方法后面添加Loop.loop();
Looper.prepare();
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
Looper.loop();
原因:
子线程只是一个普通的线程,其ThreadLoacl中没有设置过Looper,所以会抛出异常。
因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对象,比如说在某个Activity中能new一个Handler是因为Android系统在启动一个Activity的时候会默认的创建一个Looper对象,因此不能够在子线程中显示Toast,你可以在开启的子线程中执行Looper.prepare()来构建一个Looper,然后在显示Toast,但是不要忘记执行Looper.loop()来加载这个Looper.
当然,也可以使用主线程的Looper,获取主线程的Looper的方法是Looper.getMainLooper();同时需要注意的是,同样的不能在子线程中去更新UI界面,因为Toast是相对独立于UI界面的,就好比应用虽然crash掉了,并且已经返回到home界面,但是Toast依然会在hone界面显示出来。
另外可能?: 当你的程序调用了WebView加载网页,WebView会自己开启一些线程(?)
所以,当我们要显示Toast的时候,如果在子线程中,就不得不自己生成一个Looper,或者显示在主线程中
7.安卓中String转Int
使用:
Integer.parseInt(transformString)