Android Develop Tips(个人开发踩坑汇总)
2017-12-22 17:08
344 查看
ButterKnife app:transformResourcesWithMergeJavaResForDebug
Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/services/javax.annotation.processing.Processor File1: C:\Users\trascyliu\.gradle\caches\modules-2\files- 2.1\com.google.auto.service\auto-service\1.0-rc2\51033a5b8fcf7039159e35b6878f106ccd5fb35f\auto-service-1.0-rc2.jar File2: C:\Users\trascyliu\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife-compiler\8.1.0\1738ff5263b279bb0c99bf4be595b8480314d4ec\butterknife-compiler-8.1.0.jar
解决办法:
在build.gradle文件中android{}中加入下面这段代码
packagingOptions { exclude 'META-INF/services/javax.annotation.processing.Processor' }
Android Studio中Setting 没有 Android SDK
如图需要安装插件 SDK Updater
这小东西能搞死个人
android:descendantFocusability属性
如果你的自定义ListViewItem中有Button、ImageButton或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus。所以常常当点击item时变化的是子控件,item本身的点击没有响应。android:descendantFocusability="blocksDescendants" //viewgroup会覆盖子类控件而直接获得焦点android:focusable="false" android:descendantFocusability="beforeDescendants" //viewgroup会优先其子类控件而获取到焦点 android:descendantFocusability="afterDescendants" //viewgroup只有当其子类控件不需要获取焦点时才获取焦点
Android4.2以上版本 getPackageSizeInfo()改变
在Android4.2以上版本中, PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,改为PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer), 至于增加的参数userHandle的解释是:The user whose size information should be retrieved。下面是PackageManager内部的用法
public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) { getPackageSizeInfo(packageName, UserHandle.myUserId(), observer);
}
最后更改为:
private void getPacakgeStats(String pkgName) { if (pkgName != null) { try { Method getPackageSizeInfo = mPm.getClass().getDeclaredMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class); /** * after invoking, PkgSizeObserver.onGetStatsCompleted() will be called as callback function. <br> * About the third parameter ‘Process.myUid() / 100000’,please check: * <android_source>/frameworks/base/core/java/android/content/pm/PackageManager.java: * getPackageSizeInfo(packageName, UserHandle.myUserId(), observer); */ getPackageSizeInfo.invoke(mPm, pkgName, Process.myUid() / 100000, new PkgSizeObserver()); } catch (Exception e) { Log.e(TAG, e.toString()); } }
}
测试后,可用。通过查阅资料,其中Process.myUid() / 100000的解释为:
表示多用户中的某一个用户,因为一个用户装的apk可以有100000个,用uid表示,uid/100000的商就是某个特定的用户id也叫userId或者userHandle。
https://segmentfault.com/q/1010000004956250
jsoup with proguard force close 强制退出
Android studio 进行代码混淆时,如果你有用到jsoup 的第三方jarAndroid Studio中proguard-rules.pro 文件中添加 -keep class org.jsoup.**
windowSoftInputMode=”adjustResize”
如果你在 manifest 中把一个 activity 设置成android:windowSoftInputMode=”adjustResize”,
那么 ScrollView(或者其它可伸缩的 ViewGroups)会缩小,从而为软键盘腾出空间。但是,如果你在 activity 的主题中设置了
android:windowFullscreen=”true”,
那么 ScrollView 不会缩小。这是因为该属性强制 ScrollView 全屏显示。然而在主题中设置
android:fitsSystemWindows=”false” 也会导致 adjustResize 不起作用;
Android studio下 找到SystemProperties
SystemProperties
在android.os下,可以用于获取系统属性(wifi)但这个类是隐藏的,上层程序开发无法直接使用。要使用这个类,有两种方法导入layoutlib.jar 和 反射(反射可能会出现很多问题)。
导入layoutlib.jar
在build.gradle文件定义个变量,获取SDK_DIR路径。然后在String SDK_DIR = System.getenv("ANDROID_SDK_HOME") if(SDK_DIR == null) { Properties props = new Properties() props.load(new FileInputStream(project.rootProject.file("local.properties"))) SDK_DIR = props.get('sdk.dir'); } dependencies { provided files("${SDK_DIR}/platforms/android-20/data/layoutlib.jar") }
如何在AIDL中用正确的姿势unbindService()
1.注意保持Context对象的一致性,bind和unbind是同一个上下文对象。2.判断mBind,来确保unbind的时候service对象不为null.
private ServiceConnection mConnection= new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { iWeather = IWeather.Stub.asInterface(service); mBind = true; } @Override public void onServiceDisconnected(ComponentName name) { mBind = false; } };
https://stackoverflow.com/questions/1916253/bind-service-to-activity-in-android
https://stackoverflow.com/questions/6645254/when-should-i-use-unbindservice-and-how-should-i-use-it-properly-to-unbind-fr
android:configChanges属性
android:configChanges=”locale|layoutDirection”“mcc“ 移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。 “mnc“ 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。 “locale“ 所在地区发生变化。 “touchscreen“ 触摸屏已经改变。(这不应该常发生。) “keyboard“ 键盘模式发生变化,例如:用户接入外部键盘输入。 “keyboardHidden“ 用户打开手机硬件键盘 “navigation“ 导航型发生了变化。(这不应该常发生。) “orientation“ 设备旋转,横向显示和竖向显示模式切换。 “fontScale“ 全局字体大小缩放发生改变
R.string.xml占位符避免硬解码(Hardcode)
String name = "张三"; int age = 21; tx2.setText("名字是"+name+",年龄是"+age+"的用户");//不规范用法 tx2.setText(String.format("名字是%s,年龄是%d的用户",name,age));//规范用法
并添加上参数位置,如拼接的第一个参数是%1s,s表示为字符串类型。
<string name="info">名字是%1$s,年龄是%2$d的用户</string>
Error: Your project contains C++ files but it is not using a supported native build system
在从eclipse工程导入AS时,如果原工程含有JNI,经常会出现如下错误解决办法:
将如下代码加在build.gradle(app),放在buildTypes{}之上,适用于不需要重新编译so的情况。
sourceSets { // 禁用自动执行ndk-build main { jni.srcDirs = [] } }
目前没有找到这行代码的合理解释。
https://stackoverflow.com/questions/40065871/error-your-project-contains-c-files-but-it-is-not-using-a-supported-native-bu
拓展阅读
Android Studio 开发JNI笔记–①
向您的项目添加 C 和 C++ 代码
/dev/kvm is not found on Mac OS
Mac环境下模拟器不能正常使用1.Go to: System Preferences > Security & Privacy > General
There should be a message like “System software from developer xxx was blocked from loading.”
2.Click Allow
https://stackoverflow.com/questions/46565353/dev-kvm-is-not-found-on-mac-os
相关文章推荐
- android系统开发中个人小问题汇总
- Android开发&个人常见问题汇总
- android开发中开源框架汇总(个人备注)
- Android个人开发问题汇总 (持续更新中。。。)
- android系统开发中个人小问题汇总 (转)
- android开发中遇到的问题汇总【三】
- Android WebView开发问题及优化汇总
- Android开发错误汇总
- Android开发报错汇总(一)
- Android 开发使用Android studio 遇到的问题汇总
- Android样式的开发:drawable汇总篇
- Android样式的开发:drawable汇总篇
- 分享磨砺营马剑威老师讲解-Android开发技术点汇总
- Android开发使用的常见第三方框架汇总
- Qt for Android开发Android应用时的各种错误汇总(此片博文不成熟,请大家略过)
- Android开发技巧汇总(持续更新····)
- android 开发问题汇总持续
- Android开发错误汇总
- Android个人开发都盈利革命
- Android开发大神博客汇总