android相关技术总结

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

  1. android {  
  2.       
  3.    ......  
  4.   
  5.     aaptOptions.cruncherEnabled = false  
  6.     aaptOptions.useNewCruncher = false  
  7.   
  8.    ......  
  9. }  

加上后仍然报错,说格式不对,那就是这张.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,这时乱码消失,显示正常汉字

  1. .程序包android.support.v4.app不存在

Androidstudio 已经默认使用androidx里面的fragment,虽然已经引入了android-support-v4.jar,还是报找不到

解决办法:取消默认使用androidx包

把视图切换到project,到gradle.prooerties里把

android.useAndroidX=true

android.enableJetifier=true

改为

android.useAndroidX=false

android.enableJetifier=false

或直接删掉这两句

  1. xx.so" is 32-bit instead of 64-bit

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

  1. .打包后aar中的so文件找不到

App  build->clean project 如果上面不可以,那么按照下面步骤重新打包

a.先将build文件夹里面的文件全部删除  

b.再将build-->clean project

c.从app的tasks-->build-->assemble重新生成aar

  1. .java.lang.IllegalArgumentException: x + width must be <= bitmap.width()

     //去掉状态栏

        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);

  1. .解决jar冲突

-repackageclasses 'youappname or packageName'

 provided(compileOnly)

只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。

 compileOnly files('mylibs/sdk.jar')

  provided files('mylibs/sdk.jar')

  1. .Only the original thread that created
    * a view hierarchy can touch its views

添加 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);
        }
    }
});

  1. .解决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">

  1. .Library项目里面引入aar,Application项目中会找不到引入的aar

除了在Library项目build.gradle中加入

repositories {
    flatDir {
        dirs 'libs'
    }
}

Application项目中也需要加入

repositories {
    flatDir {
        dirs project(':MobilePayment').file('libs'),'libs'
    }
}

  1. .aar转jar

1.用解压软件解压aar文件

2.在解压后的文件中找出classes.jar文件

  1. 将其重命名为xx.jar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值