分类 安卓 下的文章

写在最前,安装完cmdline-tools 一定要同意license 才能正常使用

   yes | ${sdk}/cmdline-tools/latest/bin/sdkmanager --licenses

首先进入android studio 官网

在国内的话,访问cn域名可以明显方便很多

https://developer.android.google.cn/develop?hl=zh-cn

并找到命令行工具的部分

https://developer.android.google.cn/studio?hl=zh-cn 下滑找到 仅限命令行工具

可以看到 Windows, macOS, Linux的选项,点击其中一个并且确认勾选进行下载

下载连接如:

https://googledownloads.cn/android/repository/commandlinetools-linux-13114758_latest.zip

下载完毕后,解压至 ~/cmdline_tools

这个包就是SDK,只是命名不同,重新修改命名即可


一个能够用于安卓编译的SDK目录应该如下:

(base) casdon@mac ~ % ls /Users/casdon/Library/Android/sdk 
build-tools cmdline-tools   fonts       ndk     platforms   sources
cmake       emulator    licenses    platform-tools  skins       system-images

上面的下载包只能是 cmdline-tools 所以官网的相关内容也是有问题的:

sdkmanager
sdkmanager 是一个命令行工具,您可以用它来查看、安装、更新和卸载 Android SDK 的软件包。如果使用 Android Studio,则无需使用此工具,而可以从 IDE 管理 SDK 软件包。

sdkmanager 工具在 Android SDK 命令行工具软件包中提供。如需使用 SDK 管理器安装某个版本的命令行工具,请按以下步骤操作:

从 Android Studio 页面下载最新的命令行工具软件包,然后提取该软件包。
将解压缩的 cmdline-tools 目录移至您选择的新目录,例如 android_sdk。这个新目录就是您的 Android SDK 目录。
在解压缩的 cmdline-tools 目录中,创建一个名为 latest 的子目录。
将原始 cmdline-tools 目录内容(包括 lib 目录、bin 目录、NOTICE.txt 文件和 source.properties 文件)移动到新创建的 latest 目录中。现在,您就可以从这个位置使用命令行工具了。

使用sdkmanager来安装对应的sdk

首先进入

cd ~/
mkdir -p Android/sdk/cmdline-tools/latest

将上一下载的 cmdline-tools 放置到 Android目录下

mv ~/cmdline_tools/* ~/Android/sdk/cmdline-tools/latest

随后使用 cmdline-tools中的 sdkmanager来安装完整的sdk,特别是编译C/CPP JNI的库,一定要安装NDK

我们以以下几个版本为例进行安装

  • ndk;27.3.13750724
  • platform 21,24.. 31,32,33,34
  • build-tools 35.0.0
  • system-images android-27 android-35
# 使用 --list 方式查看可供下载的内容
cd ~/Android/sdk/cmdline-tools
./latest/bin/sdkmanager --sdk_root=/home/dev/Android/sdk --list

[=======================================] 100% Computing updates...             

Available Packages:
  Path                                                                            | Version           | Description                                                           
  -------                                                                         | -------           | -------                                                               
  add-ons;addon-google_apis-google-15                                             | 3                 | Google APIs                                                           
  add-ons;addon-google_apis-google-16                                             | 4                 | Google APIs                                                           
  add-ons;addon-google_apis-google-17                                             | 4                 | Google APIs                                                           
  add-ons;addon-google_apis-google-18                                             | 4                 | Google APIs                                                           
  add-ons;addon-google_apis-google-19                                             | 20                | Google APIs                                                           
  add-ons;addon-google_apis-google-21                                             | 1                 | Google APIs                                                           
  add-ons;addon-google_apis-google-22                                             | 1                 | Google APIs                                                           
  add-ons;addon-google_apis-google-23                                             | 1                 | Google APIs                                                           
  add-ons;addon-google_apis-google-24                                             | 1                 | Google APIs                                                           
  build-tools;19.1.0                                                              | 19.1.0            | Android SDK Build-Tools 19.1                                          
  build-tools;20.0.0                                                              | 20.0.0            | Android SDK Build-Tools 20                                            
  build-tools;21.1.2                                                              | 21.1.2            | Android SDK Build-Tools 21.1.2                                        
  build-tools;22.0.1                                                              | 22.0.1            | Android SDK Build-Tools 22.0.1                                        
  build-tools;23.0.1                                                              | 23.0.1            | Android SDK Build-Tools 23.0.1                                        
  build-tools;23.0.2                                                              | 23.0.2            | Android SDK Build-Tools 23.0.2                                        
  build-tools;23.0.3                                                              | 23.0.3            | Android SDK Build-Tools 23.0.3                                        
  build-tools;24.0.0                                                              | 24.0.0            | Android SDK Build-Tools 24                                            
  build-tools;24.0.1                                                              | 24.0.1            | Android SDK Build-Tools 24.0.1                                        
  build-tools;24.0.2                                                              | 24.0.2            | Android SDK Build-Tools 24.0.2                                        
  build-tools;24.0.3                                                              | 24.0.3            | Android SDK Build-Tools 24.0.3                                        
  build-tools;25.0.0                                                              | 25.0.0            | Android SDK Build-Tools 25                                            
  build-tools;25.0.1                                                              | 25.0.1            | Android SDK Build-Tools 25.0.1                                        
  build-tools;25.0.2                                                              | 25.0.2            | Android SDK Build-Tools 25.0.2                                        
  build-tools;25.0.3                                                              | 25.0.3            | Android SDK Build-Tools 25.0.3                                        
  build-tools;26.0.0                                                              | 26.0.0            | Android SDK Build-Tools 26                                            
  build-tools;26.0.1                                                              | 26.0.1            | Android SDK Build-Tools 26.0.1                                        
  build-tools;26.0
  ....

再根据上述版本号内容,选择对应工具链和版本进行安装,注意 需要使用双引号

cd ~/Android/sdk
./cmdline-tools/latest/bin/sdkmanager --install "ndk;27.3.13750724"
./cmdline-tools/latest/bin/sdkmanager "platforms;android-27"
./cmdline-tools/latest/bin/sdkmanager "platforms;android-34"
./cmdline-tools/latest/bin/sdkmanager "build-tools;35.0.1"

随后只需要将 路径输出到环境变量即可

export ANDROID_SYSROOT=~/Android/sdk

也可以把对应的输出放到 .bashrc中

JDK

不要忘了安装JDK

## default
sudo apt install openjdk-default -y

# 17
sudo apt install openjdk-17-jdk -y

基于最近考虑着手iOS 安卓 双平台的开发,整理了一下现存的一些跨平台开发思路。

为了让自己更直观的感受不同跨平台思路的差异,我简单的做了几个图示。

跨平台开发图示1

跨平台开发图示2

套壳模式

微信公众号H5(相当于) , jQuery Mobile ?

套壳模式是开发APP可以说是最简单快捷的(对于web开发者来说),基本上只要有一个正常能用的手机端可以UI适应的web就可以通过套一个壳完成APP开发。 套壳的问题主要有2个

  1. 体验不好,完全通过套壳的webapp 从性能以及UI交互上来说都会比原生app差,通过对js、css的优化,可以解决一部分,比如说click事件在手机端应当用tap事件(封装tap事件),另一部分解决不了,比如说iOS端的侧滑返回或侧滑删除功能,这个体验如果要靠js来实现,效果当然是可以写出来的,但是流畅度、细节表现大大不如原生,而且会花费比较多的时间,而且没有什么这一块比较好的库可以用。
  2. 没有原生功能支持,在微信公众号h5中,还可以通过微信的JSAPI调用部分微信提供的功能,譬如说存储图片。但是套壳在app里的时候,就完全没有办法支持了。

Web 框架模式

Dcloud H5 plus (SDK)

除了Dcloud h5 目前没有发现明确的web框架模式,这里的web框架模式主要是指以web形式开发,通过特定的SDK或者插件api访问app原生功能,不需要使用该框架特定的打包流程,支持以sdk嵌入等方式构建app的。

Web框架模式相对来说简单,快速。不用深入学习原生的内容即可快速使用原生平台的能力,通过插件的扩展也能提高一定程度上的体验效果。

- 阅读剩余部分 -

Android WebView不能加载ajax?加载ajax无效?

!苹果或高版本的安卓webview可能会有跨域被拦截的问题,需要在服务端允许跨域。 另外高版本的webview注意使用HTTPS协议的请求,普通http将会被拦截 php示例代码:

header('content-type:application:json;charset=utf8');
header('Access-Control-Allow-Origin:*'); // 被允许的访问来源
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');

1、WebView的支持js是否打开; webSettings.setJavaScriptEnabled(true);

2、webView拓展的api是否打开: webSettings.setDomStorageEnabled(true);

- 阅读剩余部分 -

安卓webview在某些版本使用location.href时会闪退。 主要问题是

通过window.location.href来重定向的,安卓不会正确触发shouldOverrideUrlLoading。

这个时候需要重写shouldOverrideUrlLoading

webView.setWebViewClient( new WebViewClient(){
 @Override
  public boolean shouldOverrideUrlLoading( WebView view, String url ){
   if(url!=""){
    view.loadUrl(url);
   }
   return true;
  }
});

最近在调试一个通过webview打开本地html的页面。 出现了: 404 Not Found The resource could not be found

用到了chrome的inspect调试,虽然在chrome://inspect 中可以看到设备,但是点击inspect却始终显示的是空白或者404。 这个时候无论我是否开启VPN,或者在webview中写入各种设置均不起作用。 一度怀疑是手机的webview框架有问题,甚至想过替换webview的方案。 但是手机同时安装的chrome浏览器,qq浏览器都可以正常调试,这是我对比了一下chrome浏览器和webview的核心版本 其中 chrome : 71.0 WebView: 51.0

在开启vpn后chrome浏览器的页面已经可以正常调试了,但是回到webview调试依然白屏。 这时我推测是两个浏览器内核之间已经不能进行有效的对接、或者谷歌服务器中没有对应的版本文件来下载,导致调试器界面无法显示。 随后我大胆的在网上下载 chrome 51.0版本,卸载了本机76.0版本进行安装。

使用51.0版本的chrome进行webview调试,成功!

- 阅读剩余部分 -