1)、小米手机adb install失败 100%稳定复现 INSTALL_CANCELED_BY_USER
adb install E:\AndroidProjects\sdk打包\增值插件CPVASPluginDemo\app-release.apk
总是报错,原因是
开发者选项里面多了一个USB安装的选项(在原来的USB调试下面),把这个打开就可以了
2)、adb相关
重启
adb kill-server
adb start-server
出现successful就重启成功了
卸载
adb uninstall com.chinapay.mobilepaymentdemo
安装
adb install com.chinapay.mobilepaymentdemo
adb install test.apk
3)、查看端口号被那个进程占用
netstat -ano
ctrl+alt+del 查看任务管理器 当前那个进程占用了80端口,然后关闭该进程
4)、改包名
Package presentationàHierachical
当前包名右键reflactoràrename
5)、Error:Execution failed for task ':app:mergeDebugResources'.
> Error: Some file crunching failed, see logs for details
经过一轮的搜查:
在gradle的android{ ... } 中加入这两句就可以了
[java] view plain copy
- android {
- ......
- aaptOptions.cruncherEnabled = false
- aaptOptions.useNewCruncher = false
- ......
- }
加上后仍然报错,说格式不对,那就是这张.9图片的问题了,重新画这张.9的图片
AAPT err(Facade for 388361331): ERROR: 9-patch image \\?\E:\AndroidProjects\CPVASFacePlugin_Demo\CPVASPlugin_FABU\build\intermediates\bundles\debug\res\drawable-hdpi-v4\title_bar.9.png malformed.
6)、Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)
V7版本包含了V4版本
如果主项目里面使用了v7,那么library项目里面再使用v4就会报这个错,解决办法
删除v4,library项目使用v7版本,然后主项目里面删除v7,因为主项目引用了library项目,就会自动带上v7版
7)、aar引用
其他androidstudio工程引用aar包
①.将aar包复制到lib目录下
②.配置build.gradle文件:
加入
android{}加入
repositories {
flatDir {
dirs 'libs'
}
}
sourceSets {
main {
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
dependencies{}加入
implementation(name: 'AccountSDK-v1.1.9', ext: 'aar')
implementation
8)、Library项目作为module引入到app项目后无法提交svn问题
修改 settings.gradle
比如引入cppaysdk这个Library
include ':app', ':cppaysdk'
cppaysdk通过eclipse生成Library项目,再转换成AndroidStudio项目
project(':cppaysdk').projectDir = new File('E:\\AndroidProjects\\CPPaySDK_20171018_WeBank\\Android\\CPPaySDK')
aggregatepaysdk通过AndroidStudio创建的Library Moudle
include ':AggregatePay:aggregatepaysdk'
project(':AggregatePay:aggregatepaysdk').projectDir = new File('E:\\AndroidProjects\\AggregatePay\\AggregatePay_20200228_new\\Android\\AggregatePay\\aggregatepaysdk')
9)、aar生成
方法一:选中当前library项目,buildàmake module ‘test’ 或者rebuild project
方法二:在Android studio下方的Terminal 下输入命令行执行构建aar
方法三:修改完脚本,点击Sync Now 按钮 就可以生成aar文件了
gradle build
aar的生成路径在:app/build/outputs/aar/xxxx.aar
只生成了debug版,没有生成release版?
1、
2、
10)、AndroidStudio出现tools:replace="android:icon"问题
E:\AndroidProjects\CPMall\app\src\main\AndroidManifest.xml:28:9-35 Error:
Attribute application@allowBackup value=(true) from AndroidManifest.xml:28:9-35
is also present at [:cppaysdk-release:] AndroidManifest.xml:24:9-36 value=(false).
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:26:5-359:19 to override.
E:\AndroidProjects\CPMall\app\src\main\AndroidManifest.xml:29:9-39 Error:
Attribute application@icon value=(@mipmap/ic_logo) from AndroidManifest.xml:29:9-39
is also present at [:cppaysdk-release:] AndroidManifest.xml:25:9-43 value=(@mipmap/ic_launcher).
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5-359:19 to override.
原因是我们的主项目中默认会定义了 `android:icon=""` ,当我们引入的第三方库中也定义
了这种标签的时候,二者合并失败就会出现此问题。
解决办法是在 <application> 标签中 添加 tools:replace="android:icon" .
首先要在 <manifest> 标签中增加一个 tools 的命名空间 :
xmlns:tools="http://schemas.android.com/tools"
与此相同的问题还有 theme ,解决办法同样是增加 tools:replace="android:theme" ,
不过当二者都合并失败时,中间应该用","隔开 :
tools:replace="android:icon, android:allowBackup ,android:theme"
增 加 以上代码 即可解决问题。
11)、com.android.dex.DexIndexOverflowException
Module app的build.gradle
defaultConfig {
applicationId "com.chinapay.cpmall"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
//20171110 com.android.dex.DexIndexOverflowException
multiDexEnabled true
}
dependencies {
//20171110 com.android.dex.DexIndexOverflowException
compile 'com.android.support:multidex:1.0.1'
}
12)、android studio svn文件提交检查命令svn status
13)、android 6.0以上动态添加权限
/**
* isMarshmallow方法.
* @return 是否是安卓23以上
*/
private static boolean isMarshmallow() {
return Build.VERSION.SDK_INT >= 23;
}
@TargetApi(23)
private void addPermission()
{
if(isMarshmallow())
{
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
}
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] { Manifest.permission.CAMERA },
PERMISSION_REQUEST_CAMERA);
}
}
}
14)、android通过命令行启动模拟器,安装和卸载app
Cmd到命令行
C:\Users\figo>D:\Android\sdk\tools\emulator.exe -netdelay none -netspeed full -avd Nexus_5X_API_24
环境变量配置
安装
adb install E:\SDK打包\天天有利(Pro_ipv6内网).apk
卸载
adb uninstall com.chinapay.profitdaily
15)、Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.
1.Check classpath in build.gradle file. change to
classpath 'com.android.tools.build:gradle:2.3.3'
2.then go to gradle-wrapper.properties, and change distributionUrl
distributionUrl=http://services.gradle.org/distributions/gradle-3.3-all.zip
16)、android项目从eclipse转换到android studio
1、生成gradle文件
2、因为eclipse gradle版本比较低,所以需要修改配置文件
Build.gradle 里面
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
gradle-wrapper.properties里面
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
17)、android studio引入Library项目
直接在settings.gradle添加
include ':MobilePayment'
project(':MobilePayment').projectDir = new File('E:\\AndroidProjects\\MobilePayment\\Android\\MobilePayment')
或者通过
FileàNewàImport module 引入该Library
18)、Android Studio自动引入所有的包名
1 Android studio 只有import单个包的快捷键:Alt+Enter。没有Eclipse下的快速导入包的快捷键Ctrl+Shift+O。
2 但Android studio设置里有一项Auto Import自动导入功能。设置过程如下:
Android studio --> File--> Settings --> Editor --> Auto Import:然后设置如下图1.
19)、华为手机usb调试的时候,有时候android studio有时候找不到需要调试的手机
设置à系统à开发人员选项àUSB调试
如果上面这种方式找不到,先关闭USB调试
改成这个顺序打开调试
设置à系统à开发人员选项à”仅充电”模式下允许ADB调试àUSB调试
20)、Android studio 无法创建Android项目 根本就没有这个选项
1.如图,点击setting--》plugins--》找到“Android Support”选项,并勾选,然后会提示重启android studio ,点击重启,ok
2.如果已经设置好SDK的路径的话,问题解决,如果还没有设置SDK路径,这时候,再如下操作:
3.打开下面的面板:
4.设置好自己的SDK路径和JDK路径,以及NDK路径(需要的话)。就可以了。
21)、Error:Execution failed for task :app:transformClassesWithInstantRunForDebug解决方案
Error:Execution failed for task ':transformClassesWithInstantRunForDebug'. > org/simalliance/openmob
其实报错里面已经给出了解决的答案,那就是InstantRun。说明这个错跟InstantRun有关系。因此第一想法就是关闭InstantRun。
打开setting,按照下图解决即可:
22)、解决Android 8 0的Only fullscreen opaque activities can request orientatio
compileSdkVersion 28改成23
android {
compileSdkVersion 23
buildToolsVersion '28.0.3'
targetSdkVersion 28改成23
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
}
或者把androidmanifest.xml里面activity的方向设置取消
23)、android studio重启adb
E:\AndroidProjects\CPAllPayDesk\CPAllPayDesk_20180723_MP\Android\MobilePaymentDemo>adb kill-server
E:\AndroidProjects\CPAllPayDesk\CPAllPayDesk_20180723_MP\Android\MobilePaymentDemo>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully
24)、如何查看手机当前打开的app的包名?
打开cmd.exe
C:\Users\figo>adb devices
List of devices attached
P7C0218703000266 device
C:\Users\figo>adb shell dumpsys window w |findstr \/ |findstr name=
mAnimationIsEntrance=true mSurface=Surface(name=StatusBar)/@0xe1e8faf
mSurface=Surface(name=cmb.pb/cmb.pb.app.mainframe.PBContainerActivity)/@0x661aaf9
mAnimationIsEntrance=true mSurface=Surface(name=com.android.systemui.HwImageWallpaper)/@0x97ef316
25)、sdk升级到28对非https请求不支持问题解决
Android P 第二个测试版本请求网络 CLEARTEXT communication to host not permitted by network_奋斗的小华子的博客-CSDN博客
解决:
1:在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml application 标签内应用上面的xml配置:
<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"></application>
或者
在application中添加
android:usesCleartextTraffic="true"
2:服务器和本地应用都改用 https (推荐)
3:targetSdkVersion 降级回到 27
26)、android 9 target=28如何继续使用apache的httpclient(因为我们是基于android6开发的,6以上因为android已经弃用httpclient,那么需要手动添加上)
加上 <uses-library android:name="org.apache.http.legacy" android:required="false" />
放在application下面
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
27)、Android Studio中找不到HttpClient问题解决
Android 6不在提供httpclient的支持
解决方法
1.eclipse
libs中加入 org.apache.http.legacy.jar
上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)
2.android studio:
在相应的,module下的build.gradle中加入:
android{
useLibrary 'org.apache.http.legacy'
}
28)、Unable to build: the file dx.jar was not loaded from the SDK folder
https://www.2cto.com/kf/201710/693069.html
Android SDK Build-tools的版本与Android SDK Platform-tools版本不一致造成
添加sdk.buildtools=你电脑上已装的build tools版本
使用更低版本的比如22.0.1 不要使用最新的
29)、Android 8.0 启动 出错 Not allowed to start service Intent { 包名} app is in background uid UidRecord
错误原因是因为:Android 8.0 不再允许后台service直接通过startService方式去启动。
所以改为startForegroundService方式启动即可。
解决方法:
1. 修改启动方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
} else {
context.startService(intent);
}
2. 并且在service里再调用startForeground方法,不然就会出现ANR
context.startForeground(SERVICE_ID, builder.getNotification());
30)、library出现两个名称?
那是因为引用路径需要改一下
Settings.gradle里面
include ':app', ':fundqcsdk'
project(':fundqcsdk').projectDir = new File('E:\\AndroidProjects\\CPFundQRSDK\\CPFundQRSDK_20200210\\Android\\FundQcSDK')
改成
File('E:\\AndroidProjects\\CPFundQRSDK\\CPFundQRSDK_20200210\\Android\\FundQcSDK')
31). adb 输出logcat日志到指定文件
//C:\Users\Administrator\Desktop\logcat.txt 日志输出路径,如果没有此文件就创建此文件
adb shell logcat -v time > C:\Users\Administrator\Desktop\logcat.txt 实时日志
adb bugreport 可导出历史日志
32). Eclipse 出现sun/misc/BASE64Encoder无法编译的问题
eclipse.ini
-vm
C:/Program Files/Java/jdk-15.0.2/bin
换成
-vm
C:/Program Files/Java/jdk1.8.0_281/bin
但是如果eclipse版本过高,只能要求jdk11以上的,那只好eclipse使用低一点的版本
33).Android Studio Build Output 栏内汉字出现乱码的解决方案
点击这个 “放大镜” 或 “双击Shift” 打开这个对话框,并在搜索框内输入 Edit Custom VM Options
点击第一个选项打开一个文件 ,并添加一行代码,并编译一下,必须编译(原因看结尾),如下图
最后重启Android Studio,这时乱码消失,显示正常汉字
Androidstudio 已经默认使用androidx里面的fragment,虽然已经引入了android-support-v4.jar,还是报找不到
解决办法:取消默认使用androidx包
把视图切换到project,到gradle.prooerties里把
android.useAndroidX=true
android.enableJetifier=true
改为
android.useAndroidX=false
android.enableJetifier=false
或直接删掉这两句
Xx.so因为是32位的,放在arm64 arm64-x8a中就不合适了,放在armeabi又找不到,咋办?
解决办法:
build.gradle app和Lib项目中都添加,告诉ndk加载32位的so文件
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
//testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
gradle.properties 添加,告知androidstudio使用老的ndk
android.useDeprecatedNdk=true
App build->clean project 如果上面不可以,那么按照下面步骤重新打包
a.先将build文件夹里面的文件全部删除
b.再将build-->clean project
c.从app的tasks-->build-->assemble重新生成aar
//去掉状态栏
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width,
height - statusBarHeight);
位置从(0,0)取,宽度和高度应该减一
改成
//去掉状态栏
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width-1,
height - statusBarHeight-1);
-repackageclasses 'youappname or packageName'
provided(compileOnly)
只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。
compileOnly files('mylibs/sdk.jar')
provided files('mylibs/sdk.jar')
添加 runOnUiThread
WebViewActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if(CPGlobalInfo.TRAN_TYPE_INSTALMENT_PAY.equals(tranType)&&CPGlobalInfo.PAYMODE_PBI_NAME.equals(payMode)) {
setBackButtonVissible(true);
}else
{
setBackButtonVissible(false);
}
}
});
- .解决AndroidManifest.xml冲突
Attribute application@theme value=(@style/Theme.StudyApp) from AndroidManifest.xml:29:9-46
is also present at [:qmf-ppplugin-android-3.1.2:]
Suggestion: add 'tools:replace="android:theme"' to <application> element
<application
android:name=".App"
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
tools:replace="android:theme, android:label, android:icon">
导入命名空间
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.bcoder.app">
- .Library项目里面引入aar,Application项目中会找不到引入的aar
除了在Library项目build.gradle中加入
repositories {
flatDir {
dirs 'libs'
}
}
Application项目中也需要加入
repositories {
flatDir {
dirs project(':MobilePayment').file('libs'),'libs'
}
}
- .aar转jar
1.用解压软件解压aar文件
2.在解压后的文件中找出classes.jar文件
- 将其重命名为xx.jar