Android使用相关技术要点

1Android Studio

Android Studio安装

MacBook m2芯片电脑安装哪个版本的Android studio

说明:Mac上选择Android studio需要选择带arm的版本。不然会安装不起来。
具体版本见前面“Android Studio安装”。

android studio默认安装路径Mac

  • 本机安装地址为:
/Users/hh/Library/Application Support/Google/AndroidStudio2020.3

Android studio升级问题

  • AS启动之后,一般会有如下弹框,\color{#FF0000}{强烈建议:不要手贱去点它!}

    image.png

  • 如果不幸点了上面的Gradle升级弹框,没出问题则罢,出了问题大概率情况需要重新安装Android studio。
    注意:重装AS前,最好清理掉如下3个位置:
    1)AS安装目录
    比如Mac上目录如下:

/Applications/Android Studio.app

2)AS下载的SDK目录
比如Mac目录如下(这是自定义目录,根据安装时目录具体找):

/Users/hh/Documents/android/sdk

3)gradle所在目录
比如Mac上目录如下:

/Users/hh/.gradle

Gradle sync失败

8:03 下午 Gradle sync failed: Sync failed: reason unknown (3 s 397 ms)

2021-11-24 20:03:56,534 [2025237]  ERROR - intellij.openapi.progress.Task - Module: 'app' platform 'android-29' not found. 

AS(Android Studio)显示工具栏步骤:

  • 主要使用点击到回到上一页/下一页功能。
  • 结论:
    View -- Appearance -- Toolbar 打上勾就会显示了。

build.gradle配置

gradle清理缓存

  • 强制清除gradle 缓存/Mac gradle清理缓存
    Windows:
gradlew build --refresh-dependencies

Mac:

./gradlew build --refresh-dependencies
  • Mac如果遇到如下问题:
zsh: no such file or directory: ./gradlew

2 开发问题

AS导入aar

android获取定位

D/@hh: locationManager has android.location.LocationManager@dd48cc0
D/@hh: isGpsEnabled is true
D/@hh: current longitude:113.10160875320435, latitude:28.240157961845398

百度地图导入:

Android导入jnilibs

ACCESS_MOCK_LOCATION 模拟定位

修改app_name后报错

"app_name" is not translated in "zh" (Chinese)
  • 处理:在res下的strings.xml中添加translatable:
<string name="app_name" translatable="false">APPDEMO</string>

Android检查定位权限

ActivityCompat.OnRequestPermissionsResultCallback

android判断权限为询问状态

shouldShowRequestPermissionRationale

Android延时函数

andorid获取上下文

Android字典和json格式

fastjson

java单例模式

android broadcastreceiver

Android广播注册

9patch图

/Users/hh/Documents/androidProject//app-demo-android//app-demo-android/app/src/main/res/drawable-hdpi/splash.9.png: AAPT: error: file failed to compile.
  • 处理:
    由于着急用,干脆不用9patch图,直接用png图

SharedPreferences

Android从后台回到前台回调

android方法设置callback为参数

android软件安装列表权限

android.permission.GET_TASKS

queryIntentActivities

Build.MANUFACTURER.equalsIgnoreCase

Android加载控件loading

Android获取最上层的view

Android的Activity获取监听广播

应用适配Android12

  • 说明:如果targetSdkVersion设置31或以上,则需要适配Android 12,看资料可知需要将工程中AndroidManifest.xml所有exported的地方设置为true,包括引入的库也需要做适配(比如在app下的build.gradl做配置,具体见如下参考)。如果工程不对这个做要求,可以降低targetSdkVersion版本(低于31)即可。
android:exported="true"

targetSdkVersion

Build.MANUFACTURE

android:allowBackup

provider authorities

Android新建module后运行找不到类

android的module里再引入module

  • 说明:这里是以IM实时通讯引入举例:
    (1)主工程app下build.gradle配置dependencies库:
    api project(':offlinepush')

(2)offlinepush模块(module)下build.gradle配置dependencies库:

    api project(':pushcore')

(3)pushcore模块(module)下build.gradle配置dependencies库:

   if (projects.contains("imsdk-plus")) {
        api project(':imsdk-plus')
    } else {
        api 'com.tencent.imsdk:imsdk-plus:6.3.2609'
    }

具体遇到的问题,见后面“ 6 IM实时通讯”(具体配置以这里为准)。

android provider

3 调试

Android调试问题汇总

4 真机/模拟器

AS的AVD模拟器安装问题

Installation did not complete successfully. See the IDE log for detals.

AVD启动问题

AVD Manager
The emulator process for AVD Pixel_2_API_30 has teminated.
Unable to install Intel HAXM
HAXM can only be installed on Windows or Mac.
Please file a bug against Android Studio.

参考:
https://blog.csdn.net/liulanzaijia/article/details/84870972
https://blog.csdn.net/u013475983/article/details/108767595

AVD成功启动模拟器

(1)虚拟器 AVD:安装apk,报错

hh@hhdeMacBook-Pro ~ % adb devices
List of devices attached
emulator-5554    device

hh@hhdeMacBook-Pro ~ % adb install /Users/hh/Documents/COSBrowser/app/4.07.23/prd-uniapp-V4.07.23.apk
Performing Streamed Install
adb: failed to install /Users/hh/Documents/COSBrowser/app/4.07.23/prd-uniapp-V4.07.23.apk: 
Exception occurred while executing 'install':
android.os.ParcelableException: java.io.IOException: Requested internal only, but not enough space
    at android.util.ExceptionUtils.wrap(ExceptionUtils.java:34)
    at com.android.server.pm.PackageInstallerService.createSession(PackageInstallerService.java:595)
    at com.android.server.pm.PackageManagerShellCommand.doCreateSession(PackageManagerShellCommand.java:3434)
    at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1446)
    at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1408)
    at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:221)
    at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
    at android.os.ShellCommand.exec(ShellCommand.java:38)
    at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:5954)
    at android.os.Binder.shellCommand(Binde%  
/Users/hh/.android/avd/Pixel_3a_API_33_arm64-v8a``.avd/

查看config.ini文件:

  • 说明:
    找到hw.ramSize=1536,该键用于设置内存大小,默认好像是256M
    上面的值为:hw.ramSize=1536
    修改为:hw.ramSize=15360

(2)还是不行,重新创建了一个AVD:

/Users/hh/.android/avd/Pixel_3a_XL_Edited_API_33.avd 
  • 终于运行起来了。

Mate20通过浏览器安装apk无法安装

mac上AS模拟器上不了网

小米手机安装失败

03/07 21:14:40: Launching 'app' on Xiaomi M2102J2SC.
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_USER_RESTRICTED

oppo手机截屏怎么截

5 应用市场审核

华为应用审核提示获取安装列表

华为应用市场审核问题:

经检测发现,您的应用存在获取用户的软件安装列表敏感信息行为,且未在应用内的隐私政策/在AppGallery Connect上提交的隐私政策网址中进行说明

vivo应用存在强制用户使用定向推送功能--不通过

6 IM实时通讯

IM推送:日志

Cannot resolve symbol 'HmsMessageService'

IM推送:工程接入:日志

(1)第一个问题

Could not determine the dependencies of task ':app:compileAPPMASTERDebugJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:APPMASTERDebugCompileClasspath'.
   > Could not resolve project :com.app.demo.pushcore.
     Required by:
         project :app > project :offlinepush
      > No matching configuration of project :com.app.demo.pushcore was found. The consumer was configured to find an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug', attribute 'buildType' with value 'APPMASTER' but:
          - None of the consumable configurations have attributes.
Build file '/Users/hh/Documents/androidProject/app-demo-android/app-demo-android/offlinepush/build.gradle' line: 65

A problem occurred evaluating project ':offlinepush'.
> Project with path ':pushcore' could not be found in project ':offlinepush'.
Execution failed for task ':offlinepush:generateReleaseRFile'.
> Could not resolve all files for configuration ':offlinepush:releaseCompileClasspath'.
   > Could not find com.huawei.hms:push:5.0.2.300.
     Required by:
         project :offlinepush
  • 处理:按照前面介绍的引入module的方式即可解决。
    api project(':xxxxx')

IM推送:启动崩溃:日志

    java.lang.RuntimeException: Unable to get provider com.app.demo.offlinepush.OfflinePushService: java.lang.ClassNotFoundException: Didn't find class "com.app.demo.offlinepush.OfflinePushService" on path: DexPathList[[zip file "/data/app/com.app.demo-HT2QvzzgeOC4gRSARfORWg==/base.apk"],nativeLibraryDirectories=[/data/app/com.app.demo-HT2QvzzgeOC4gRSARfORWg==/lib/arm64, /data/app/com.app.demo-HT2QvzzgeOC4gRSARfORWg==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]

     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.app.demo.pushcore.ServiceInitializer" on path: DexPathList[[zip file "/data/app/com.app.demo-Be3Tve4GJG5ZY-d3uOQ1DA==/base.apk"],nativeLibraryDirectories=[/data/app/com.app.demo-Be3Tve4GJG5ZY-d3uOQ1DA==/lib/arm64, /data/app/com.app.demo-Be3Tve4GJG5ZY-d3uOQ1DA==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]

IM推送:工程配置,日志

/Users/hh/Documents/androidProject/app-demo-android//app-demo-android/app/src/main/AndroidManifest.xml:148:9-150:47 Error:
    Attribute meta-data#XG_V2_ACCESS_ID@value at AndroidManifest.xml:148:9-150:47 requires a placeholder substitution but no value for <XG_ACCESS_ID> is provided.
/Users/hh/Documents/androidProject//app-demo-android//app-demo-android/app/src/main/AndroidManifest.xml:152:9-154:48 Error:
    Attribute meta-data#XG_V2_ACCESS_KEY@value at AndroidManifest.xml:152:9-154:48 requires a placeholder substitution but no value for <XG_ACCESS_KEY> is provided.

oppo推送申请channelid

push : registerID

  • 说明:IM会获取手机设备的token,作为registerID。

推送:IM: 检测

  • oppo推送:
    sign校验不通过,无效签名(OPPO返回错误码: 16),请检查您上传的证书参数是否有误(特别注意:OPPO需要上传的是MasterSecret, 而不是AppSecret。) 具体可参考:https://cloud.tencent.com/document/product/269/37729

  • 处理:重新在IM上更正MasterSecret和添加ChannelID后,推送检测成功(但手机为收到):
    token: ****599b 已成功推送。如果仍无法接收,请确认接收方手机已经打开您APP的通知功能。

7其他

keystore获取md5

hh@hhdeMacBook-Pro bin % pwd
/Applications/Android Studio.app/Contents/jre/Contents/Home/bin
hh@hhdeMacBook-Pro bin % ls
jaotc        javac        jdeprscan    jimage        jrunscript    rmiregistry
jar        javadoc        jdeps        jjs        keytool        serialver
jarsigner    javap        jfr        jlink        pack200        unpack200
java        jdb        jhsdb        jmod        rmid
hh@hhdeMacBook-Pro bin % 
hh@hhdeMacBook-Pro bin % keytool -list -v -keystore /Users/hh/Documents/androidProject/wvpn-sany-lt-shipper-android/keystore/sanylighttruck.keystore
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
java version "18.0.2.1" 2022-08-18
Java(TM) SE Runtime Environment (build 18.0.2.1+1-1)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)

通过keytool命令:

keytool -list -v -keystore + keystore的绝对路径

能够拿到证书指纹,包括SHA1和SHA256,但是获取不到MD5.

解决:需要降低JDK版本,比如安装Java7就可以获取到MD5.

beyond compare mac到期

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容