Android 萝卜坑

1:异常:failed to read key from keystore
A:一般是当前文件不存在签名文件;
B:签名文件填写的信息有误:如签名别名:keyAlias
签名别名查看方式:通过在AndroidStudio  中打开控制台 ,在当前存在签名的文件中通过控制台输入:keytool -list  -v -keystore xxxx.keystore -storepass 密码  签名的信息就有了
2:混淆错误
 Error:Error: Avoid non-default constructors in fragments: use a default constructor plus 
 Fragment#setArguments(Bundle) instead [ValidFragment]

解决:@SuppressLint({"NewApi", "ValidFragment"})
在构造方法上加上这个注解,就可以不检察,但这google不推荐这种做法。
3:百度定位
获取app上线产品对应的SHA1:
打开cmd:
步骤1:输入命令:cd .android    回车;
步骤2:输入命令:keytool -list -v -keystore 自己打包apk的签名文件路径   (这一步回车后;输入秘钥口令)
例如: keytool -list -v -keystore D:\Codes\app\xxx.jks    回车;既输出:SHA1值;

4:android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment xxx.fragments.XXXFragment: make sure class name exists, is public, and has an empty constructor that is public

 
这种问题一般都是:XXXFragment的类中用的应该是public;但是有的是受保护的或者私有的 ;导致的; 所以把这个类中的那些 改成:public  ;然后在添加一个 构造就可以了:
如: public XXXFragment(){}
5:解决 fastjson 混淆问题:
场景:debug包测试正常;打 混淆包 数据不显示;
解决:
-keepattributes Signature
-dontwarn com.alibaba.fastjson.**
-keep class  com.alibaba.fastjson.**{*;}
最重要的是:不能混淆 JavaBean实体类:
-keep class  com.xxx.xxx.utils.**{*;}
-keep class  com.xxx.xxx.xxxUtils.**{*;}
凡是用到 fastjson 的地方包括 Adapter ,fragment等都不能被混淆,这些可能用到实体类 。
6: 直接给long类型的变量赋值时报错
正确的写法:long secondss=1326446899902L;才不会报错
7:Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry has been closed.
解决方式:清理缓存
AndroidStudio-->File-->Invalidate Caches/Restart... :丢弃无用的缓存。
(配图到CSDN更好) 
8:Error:Execution failed for task ‘:app:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v4/view/VelocityTrackerCompat.class

版本问题。

9:AS打包出现app:transformClassesAndResourcesWithProguardForRelease错误
场景:我在使用okhttp3架包混淆的时候;在混淆文件中添加okhttp3的混淆代码:
如:
#okhttp3 混淆
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**

但是在Release 版本打包的时候报的上面的错误:
解决方式:在混淆文件中添加:
#添加okhttp3 混淆前;解决混淆出现的问题
#### -- Picasso --
-dontwarn com.squareup.picasso.**
#### -- OkHttp --
-dontwarn com.squareup.okhttp.internal.**
#### -- Apache Commons --
-dontwarn org.apache.commons.logging.**
-ignorewarnings
-keep class * {
public private *;
}

------------2018年5.21号-----分割线-------
1:Error:android-apt plugin is incompatible with the Android Gradle plugin. Please use ‘annotationProcessor’ configuration instead.
升级新版AndroidStudio 版本填坑...
原因是:(这个一般情况是注解库导致的问题)
以plugin开始,第三方android-adt不在受支持,所以这个问题根据建议,我们将项目中的adt 替换成 annotationProcessor,
将 app下的adt依赖替换成 annotationProcessor,然后将apply plugin: ‘android-apt’去除.我们以butterknife注解库为例。
例如:
在app --> build.grdle 中:
 // apply plugin: 'android-apt'         //注释掉这行代码
在:
dependencies{
//XXXXX

//原始的:apt
 // apt 'com.jakewharton:butterknife-implementationr:8.0.1'
 //改成兼容的:
 annotationProcessor 'com.jakewharton:butterknife-implementationr:8.0.1'
}
2:AndroidStudio 新依赖项配置 部分说明:
     新配置                  已经弃用的配置
A:  ---implementation---       ---compile---
implementation:依赖项在编译时对模块可用,并且仅在运行时对模块的消费者可用。 对于大型多项目构建,使用 implementation 而不是 api/compile 可以显著缩短构建时间,因为它可以减少构建系统需要重新编译的项目量。

B: ---api---                  ---compile---
api :一般情况下,您应当仅在库模块(也就是lib库)中使用它,应用模块(如:ButterKnife库)应使用 implementation 。

C:  ---compileOnly---	      ---provided---
D:  ---runtimeOnly---	      ---apk---
注:compile、provided 和 apk 目前仍然可用。 不过,它们将在下一个主要版本的 Android 插件中消失。

3:如果您在迁移到新依赖项解析策略时遇到问题,可以设置 includeCompileClasspath true,将行为恢复为 Android 插件 2.3 的行为。 不过,不建议将行为恢复为版本 2.3,未来更新中将移除恢复选项。
app --> build.gradle 文件中
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath true
            }
        }
    }
}
4:快速多次点击一个按钮事件,导致打开多次逻辑:
在Actitity对应的AndroidManifest.xml中添加:
  android:launchMode="singleTask"
  即可。(单任务模式)
5:Could not find class ‘android.graphics.drawable.RippleDrawable’, referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
解决: minSdkVersion xxx版本问题;
修改版本即可。
6:AndroidStudio生成debug包;直接手机链接电脑安装是可以安装的;如果把apk包复制出来给别的手机或者别人安装就提示:安装包损坏…
解决方式:
 用build->build APK(s)来生成apk,,,就可以了。
7:修改ApplicationId;替换文件;修改包名文件名称;
a:修改 build.gradle 
b:修改 AndroidManifest.xml
Sync new...一下;发现很多错误;主要是 用的包名改变了;
这里就要替换文件了;
---替换文件---
选中所在项目-->右键"Replace in Path.." 填写要替换和被替换的内容;选择右下角的 Relpace in Find Window...然后可以一个个的替换;也可以全部一起替换(不推荐全部一起替换这种)。
---修改包名文件名称--
项目Project 所在的位置的右边有一个设置的图片样式--> Hide Empty Middle Packages 不要勾选...
然后在项目要添加的修改的地方新建一个 项目的文件夹包名名称,把项目的类/包等全部托进去即可。。简单粗暴。
8:安装软件到手机上(例如vivo手机)出现的问题:installation failed with message failed to finalize session : INSTALLL_FAILED_INTERNAL_ERROR
解决方案:
File -> Settings... -> Build,Execution... -> Instant Run 在如图所示取消勾选,OK即可。
既是选项:Enable instant run to hot swap code/resource changes on deploy (default enable)  取消勾选。
9:IllegalStateException: Can not perform this action after onSaveInstanceState
解决方式:
原因是说我使用的 commit方法是在Activity的onSaveInstanceState()之后调用的,这样会出错,因为onSaveInstanceState
方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存玩状态后再给它添加Fragment就会出错。解决办法就
是把commit()方法替换成 commitAllowingStateLoss()就行了,其效果是一样的。
10:Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception:
解决方式:
找到工程根目录下的gradle.properties文件
// 关闭APPT2 编译 
android.enableAapt2 = false
10:Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.
解決方式:添加:
 jackOptions {
            enabled true
        }
代码中的位置如:
defaultConfig {
        applicationId "com.xxx"
        minSdkVersion 19
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        jackOptions {
            enabled true
        }
}
11:Android Error:Execution failed for task ‘:app:transformClassesAndResourcesWithProguardForRelease’.
解决方式:
原因是 Proguard 文件启用时报错,解决方式有两种,一种是如果你要禁用 proguard 文件,直接在项目的 build 文件中将 minifyEnabled 设置为 false,如果不想禁用 proguard 文件,那么可以将 
-ignorewarnings -keep class * { public private *; } 
添加到 Proguard 文件中,然后重新编译打包,这样就能解决打包报错的问题了!

12:Error:Execution failed for task ‘:app:transformJackWithJackForRelease’.

com.android.sched.scheduler.PlanError: ‘SeedPrinter’ need [OriginalNames, SeedMarker] …
错误原因:因为代码中用到了 lambda表达式 在buidl.gradle中配置JDK 8不适配导致的错误;
解决方式:如下几个步骤:
a:在项目–>build.gradle 文件的 dependencies {//…}中添加:
dependencies {
classpath ‘me.tatarka:gradle-retrolambda:3.6.1’
}
b:在app–>build.gradle中的:
dependencies{//…}中添加:
dependencies {
///XXXXXX
retrolambdaConfig ‘net.orfjackal.retrolambda:retrolambda:+’
}
在 android{///…}中添加:
android {
//—XXXXXXX
//开启Java1.8 能够使用lambda表达式
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

在app–>build.gradle最上面添加:
apply plugin: ‘me.tatarka.retrolambda’

c:混淆添加:
-dontwarn java.lang.invoke.*

13:显示 JNI日志 设置方式:
a:在AS主界面 运行的三角形按钮的 左侧有可以选择的:
Edit Configurations... 
app
选中:Edit Configurations...--> app 右面 --> Debugger --> Debug type: 选项选择:Native -->Apply --> OK  。
b:File --> Project Structure... --> app 右边 --> Build Types --> Jni Debuggable 选择 ture  即可。
14:如果项目 感觉确实没有错误;但是 在 运行项目的 三角呼号 左边的 app 上面一直线上 红色的X :
那么可以: Tools  --> Android --> Sync Project with Gradle Files  
或者可以解决问题。。
15:Error retrieving parent for item: No resource found that matches the given name
原因是:版本问题;
如在:项目的 build.gradle 中:
原来的是:
compileSdkVersion 23
buildToolsVersion '25.0.0'
改成:
compileSdkVersion 25
buildToolsVersion '25.0.0'

既是:把compileSdkVersion  的版本号大于等于 25 即可 ; 目前个人使用的是:25 
16:YunGo项目 如果运行在:个人的计算机上面;需要做的一些修改:
a:修改版本号;参考 YunGoRun 项目; (注意版本号:25) (gradle文件中也需要修改)
b:在 app --> build.gradle 里面的 android {} 标签添加:
  aaptOptions {
        cruncherEnabled = false
        useNewCruncher = false
    }
c:注意依赖 使用:compile

以上三步基本可以的 ;
如果还有其他的问题:
那么可以在项目 -->  gradle.properties 文件中添加:
android.enableAapt2=false
17:错误: 不兼容的类型: View无法转换为TextView
类似无法转换的问题:可以直接强制转换就号:
如上面的View 无法转换为TextView ;那么只要添加:(TextView) 即可。
18:LinearLayout 里面包含 RelativeLayout 标签 不同版本可能存在 异常风险:
如 项目中的:
activity_login.xml 就是这个问题;
19:异常Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.
解决办法:是点击Build->Rebuild Project 就可以。。
20:广播的简单使用:
a:变量声明
LocalBroadcastManager broadcastManager;
IntentFilter intentFilter;
BroadcastReceiver mReceiver;

b:广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里。

broadcastManager = LocalBroadcastManager.getInstance(getActivity());
intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.CART_BROADCAST");
mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent){
                //收到广播后所作的操作
            }
 };
 broadcastManager.registerReceiver(mReceiver, intentFilter);

c:可以在任何或其他类的地方发送广播:
Intent intent = new Intent("android.intent.action.CART_BROADCAST");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

d:当然,和正常广播一样,也要在对应的生命周期中反注册掉: 这个和 步骤 b 中对应(也就是在 步骤 b 的所在类中操作) 。 
@Override  
protected void onDestroy() {  
   super.onDestroy();  
   broadcastManager.unregisterReceiver(mReceiver);
}






1:创建项目需要注意的地方(否则创建的新项目有各种奇怪的错误):
例如:
1:新建项目 --> 选择创建的文件位置;和包名称等 
--> 选择 版本(如:Api21 版本是 5.0(Lollipop)点击 Next 
 --> 选择新建一个空项目 Empty Activity  
 --> Next (下一步) --> 到 Configure Activity 界面  (这个是重点)
 不需要勾选 Backwards Compatibility (AppCompat) 这样点击“Finish” 就创建完成了;这样一般是不会有因为AS版本的问题出现的error的 。
2:新建项目(版本是3.0后的AS开发软件)出现报错:

Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

解决方式:
a:简单的解决方式:在:项目--> gradle.properties 中添加:android.enableAapt2=false (是目前个人使用的方式)
缺陷是 每次新建项目都要 在 项目--> gradle.properties 中添加:android.enableAapt2=false.
b:永久解决方式:
在AndroidStudio的安装目录下的:android-studio\plugins\android\lib\templates\gradle-projects\NewAndroidProject\root\gradle.properties.ftl   打开gradle.properties.ftl文件并在文件末尾添加上:
android.enableAapt2=false    即可。(目前个人使用的不是这个方式)
3:Error:No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
解决方式:从字面上理解是 NDK的配置出现了 问题; 那么只需要删除NDK或者重新下载NDK就可以了。
 既是项目中:Android studio ( Tools -> Android -> SDK Manager --> SDK Tools 中 ) . 选中NDK项,并将其删除(就是取消勾选),如果程序需要的话,可重新安装。
 如果重新安装后还是有这个问题;那么就是说如果我们必须要求使用这个架包:mips64el-linux-android ;那么添加这个架包的方式是:在 Android 开发官网中:https://developer.android.com/ndk/downloads/?hl=zh-cn
 下载NDK 并解压获取获取到 里面的架包:mips64el-linux-android 并放在个人下载的NDK下面即可。
 mips64el-linux-android 存放的目录是:SDK-->ndk-bundle  --> toolchains  下面。(个人下载的NDK和官网下载的位置都是一样的。或者直接用官网下载的NDK放在自己的SDK下也是Good的。)
 具体可以参考:https://blog.csdn.net/qq_24118527/article/details/82867864  中的解决方式。
 
4:Error:Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details. This warning can be disabled by adding the line ‘android.overridePathCheck=true’ to gradle.properties file in the project directory.
解决方式:原因是 项目路径含有 中文;把项目放在不是中文的目录下 就可以了。
5:Failed to list versions for net.orfjackal.retrolambda:retrolambda.
修改设置就正常解决了问题:参考:
https://www.jianshu.com/p/587dbb9e35f1
6:项目中出现 .R 包报错(本应该是正确的或者已经存在 AppId 的ID,但是就是报错的)或者资源文件(如:xml中的Layout.xml 或者 string.xml 等 )不能找到对应的ID 资源属性的 ,,如果代码确定是没有问题的;那么可能的文件是版本的问题;
解决方式:在AndroidStudio -->File --> Project Structure -> 选择Modules 中的 app --> Properties --> 调整 Compile Sdk Version(如改成:API26:Android 8.0) 和 Build Tools Version(如改成:28.0.3) 版本。  
几个小笔记:
---A1:JsonOnlineViewer 插件:可以直接在AS中调试接口数据:如Post /Get 等;在AS-->View-->JOSNViewer ;
---B1:CodeGlance 插件: 右边出现代码缩略图:可以快速查看位置代码。
安装方式:如:JsonOnlineViewer插件安装
 1:AndroidStudio-->Settings-->Plugins-->Browse repositorest...在搜索框中输入:JsonOnlineViewer  然后安装即可;重启软件生效。


---C1: 工具类:
1: a:重复点击;b:SHA加密;c:RSA解密;d:md5加密;e:手机唯一ID;f:比较版本号大小;g:机身内存大小(类:SDUtils);h:获取程序版本号;i:
参考:
http://blog.csdn.net/lmj623565791/article/details/38965311
注明:目前工类系列已基本完成(不包括加密解密:SHA/RSA/md5);下一个系列注意写:加密解密:SHA/RSA/md5。
2:统计:
A:flurry统计
B:友盟统计
C:极光推送
D:个推
E:CNZZ
F:51.la

---D1:android studio如何导出配置文件(字体,背景等等的配置):
android studio如何导出配置文件(字体,背景等等的配置)?在使用 Android Studio 时,往往会进行一些设置,比如 界面风格、字体、字体大小、快捷键、常用模板等。但是这里的设置只能用在一个版本的 Android Studio 上,如果下载了新的 AS 版本或者需要在 家里 或者 办公室 里使用 Android Studio ,则不得不再次设置,或者你同事或朋友花了很多时间,配置了一个非常棒的设置组合,你想也设置成这个样子,如果一个一个手动设置自然是不现实的,下面就来讲讲如何导出 设置,从而实现共享。
Android Studio
方法/步骤
A:
选择 File -> Export Settings...,然后勾选需要到处的设置项,Code Style,File Template, Key maps ,Live Templates 等比较常用的,可以自己选择到处后的存放地址,命名为 settings.jar
B:
导出成功后,会有一个成功提示。导出成功后,会得到一个 settings.jar 包,可以把这个 jar 包保存起来,共享给同事,或者拷贝到 家里 或者 办公室 的电脑里面。
C:
接着便是 导入 的工作,选择 File -> Import Settings...,然后选择第二步中的 jar 包,选择需要导入的模块,点击 OK 即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值