android,java知识点总结 (二)

1、mac版studio 项目构建过程中要注意的问题

gradle下载过慢导致项目一直构建的问题
命令行打开指定文件夹 open xxxx
下载gradle包以后添加到.gradle 目录相对应的位置

如果模拟器或者手机出现 

Failed to finalize session : INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113
需要添加

splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a'
            universalApk true
        }
    }

2、通过git 进行代码的提交分支的合并

本地分支需要从本地master中提交代码
查看所有分支,以及当前分支是哪个 git branch -a
提交本地修改到远程分支git push -u origin master (提交到远程master分支上)

3、git仓库代码迁移(把现有仓库中的代码同步到一个新的仓库,保留现有仓库的提交等记录)

直接修改congfig文件中的远程地址为新的地址,然后强制提交。

.git/config
config文件内容

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    #url = https://gitlab.51y5.net/hanchengyue/kankan.git
    url = https://gitlab.51y5.net/kankan/kankan-android-client.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "dev"]
    remote = origin
    merge = refs/heads/dev

4、使用lottie的时候要注意不能调用setImageResource设置要显示的图片,否则添加的动画json文件不会执行

5、设置ViewGroup 中item的动画效果(添加,删除等等)

通过LayoutTransition类来进行实现,还需要设置布局属性
 android:animateLayoutChanges="true" 

6、属性动画开始位置是以当前对象的坐标原点开始。

7、window 的style设置

<style name="BottomDialog" parent="@style/AppTheme">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name=“android:windowIsFloating”>true</item>//是否浮activity上
        <item name="android:windowSoftInputMode">stateAlwaysVisible</item><!--显示软件盘-->
        <item name=“android:windowBackground”>@android:color/transparent</item>//背景颜色
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsTranslucent">false</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:backgroundDimEnabled">false</item><!--模糊-->
    </style>
如果这个地方设置以后不需要在代码中设置window 的显示状态
//如果添加了下边这一行代码,那么依然不是透明的 
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//设置dialog的背景

8、java中引用类型数据的使用注意事项

如果在使用过程中使用集合或者容器类的话,那么添加到其中的类对象如果改变,那么会印象其在容器或者集合中的对象,因为保存的都只是这个对象的引用地址,只要引用地址没有改变,那么对这个对象的修改就会影响所有该引用地址的对象。
在使用引用类型进行数据传递的时候也一定要注意,如果希望操作结果不会影响该引用对象的属性时,最好是创建一个新的对象来进行传递,保留旧对象不变。
可以实现Clonable接口,实现clone方法,克隆一个新对象来进行操作。

9、通过配置scheme让其他应用或者html页面打开android 应用

目前使自己的应该可以被自己或者其他第三方应用,或者是html页面调起的需求经常会有,根据调起以及交互的需求等,可以分为以下几种实现方式:

1. 如果需要交互
需要交互的话,可以通过俩中方式 (1)通过广播 (2)通过aidl
如果是需要跟html页面进行的交互,那么可以通过添加了@JavascriptInterface,也可以通过拦截
shouldOverrideUrlLoading ,或者拦截onJsAlert(js对话框),或者onJsConfirm(确认对话框)或者onJsPrompt(可编辑文本框)来进行js对于本地代码的请求。
2、只需要单方面调起
也就是我们的应用只要可以被其他应用调起就ok,那么可以通过android的Intent 隐式调用
3、可以调起不同页面,而且可以简单的传递参数
也就是通过配置scheme。
配置该功能只要在要被调起的activity中配置

 <activity android:name=".MainActivity">
    <intent-filter> <!--正常启动-->
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter> <!--URL Scheme启动-->
        <!--必有项-->
        <action android:name="android.intent.action.VIEW"/>
        <!--如果希望该应用可以通过浏览器的连接启动,则添加该项-->
        <category android:name="android.intent.category.BROWSABLE"/>
        <!--表示该页面可以被隐式调用,必须加上该项-->
        <category android:name="android.intent.category.DEFAULT"/>
        <!--协议部分-->
        <data android:scheme="urlscheme"
            android:host="auth_activity">
    </intent-filter>
    <intent-filter>
        <action   android:name="emms.intent.action.check_authorization"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="emms.intent.category.authorization"/>
    </intent-filter>
</activity>

具体可以参考:http://www.jianshu.com/p/7b09cbac1df4

10、mac 中查看.gradle 文件夹下 gradle版本。手动下载替换gradle 文件。

一般安装studio 以后.gradle的地址默认在
/Users/xxxxx/.gradle 路径下。
通过命令行进入 到/Users/xxxxx/ 目录下,然后通过ls -a 列出所有的文件以及文件夹。
通过open .gradle 打开该目录,然后就可以替换以及修改配置。

11、android 获取ImageView中的Bitmap

获取之前一定要调用setDrawingCacheEnabled(true),否则,无法从ImageView对象中获取图像。
在调用getDrawingCache()方法从ImageView对象获取图像之后,一定要调用setDrawingCacheEnabled(false)方法以清空画图缓冲区,否则,下一次从ImageView对象中获取的图像,还是原来的图像。

12、CoordinatorLayout,CollapsingToolbarLayout,AppBarLayout等实现标题栏的折叠视觉差等效果。

http://blog.csdn.net/a553181867/article/details/52871424

13、21、android图片保存完以后刷新相册

通过Intent 来刷新
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);

14、WebView中使用键盘,全屏(即是页面是全屏的,包括Application或activity使用了Fullscreen主题、使用了『状态色着色』、『沉浸式状态栏』、『Immersive Mode』等等——总之,基本上只要是App自己接管了状态栏的控制)都会出现软键盘弹出遮挡输入框的情况。

解决方式:通过动态计算键盘弹出以后可用区域的大小来设置当前布局显示的大小。
如果是Dialog中出现键盘问题,那么也可以通过动态监听View树的变化,然后动态添加输入框到键盘上方。如果键盘显示,那么计算键盘的高度,然后添加输入框到该位置,如果隐藏,那么输入框也移除或者隐藏。
可以参考:https://www.diycode.cc/topics/383

23、使用美团Walle多渠道打包框架 ,然后使用360加固以后获取不到channel名称问题。(使用walle就不能再配置productFlavors)

因为使用签名方式不同,Walle 使用v2 ,pc端360加固宝 使用v1
解决方式 :
1、使用其他方式加固(加固方式要是v2)
2、使用web端360加固,然后下载以后自己签名
 通过zipalign 对齐优化 使用 apksinger签名

24、使用walle-cli-all.jar 多渠道打包

使用CheckAndroidV2Signature.jar 检查签名信息
使用walle-cli-all通过命令行 打各个渠道的包

猜你喜欢

转载自blog.csdn.net/u012808234/article/details/78552043