两侧同时换到之前的修订记录 前一修订版 后一修订版 前一修订版 public:it:android [2018/11/01 10:50] – [Tips] oakfire public:it:android [2022/08/03 08:38] (当前版本) – [Articles] oakfire
====== Android ====== ====== Android ======
* Official developer site: [[https://developer.android.com]] 需翻墙. * Official developer site: [[https://developer.android.com]] 需翻墙.
* 七牛的cdn [[http://androiddoc.qiniudn.com/develop/index.html| androiddoc.qiniudn.com]] * <del> 七牛的cdn [[http://androiddoc.qiniudn.com/develop/index.html| androiddoc.qiniudn.com]]</del>
===== 系统修改 ===== ===== 系统修改 =====
==== APP 路径 ==== ==== APP 路径 ====
* ''/data/app/'' 下为用户安装的 app * ''/data/app/'' 下为用户安装的 app
* ''/system/app/'' 下为系统原装 app * ''/system/app/'' 下为系统原装 app
* FIXME * ''pm list packages -f'' 可列出 app 包及关联文件
* 在android设备设置界面上修改网络后,信息会保存在 ''/data/data/com.android.providers.settings/databases/settings.db'' * 在android设备设置界面上修改网络后,信息会保存在 ''/data/data/com.android.providers.settings/databases/settings.db''
==== 刷机 ==== ==== 刷机 ====
===== Articles ===== ===== Articles =====
* [[https://github.com/Freelander/Android_Data|别人汇总的 Android 学习资料]] * [[https://github.com/Freelander/Android_Data|别人汇总的 Android 学习资料]]
* [[http ://www.runoob.com/w3cnote/android-tutorial-contents .html|Android 入门基础教程系列]], 看下来感觉很不错. * [[https ://www.runoob.com/w3cnote/android-tutorial-intro .html|Android 入门基础教程系列]], 看下来感觉很不错.
* [[https://www.jianshu.com/p/33cc83941ecf|AndroidStudio 工程目录结构及简单使用]]
* [[http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/index.html|详解 android 的 Activity]], 介绍了 Activity 以及它们之间怎么交互, 文章比较老. * [[http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/index.html|详解 android 的 Activity]], 介绍了 Activity 以及它们之间怎么交互, 文章比较老.
* [[http://www.cnblogs.com/oakpip/archive/2011/04/08/2009800.html|关于 webview]] * [[http://www.cnblogs.com/oakpip/archive/2011/04/08/2009800.html|关于 webview]]
* [[http://laobie.github.io/android/2016/02/14/android-studio-tips.html| android studio tips]] * [[http://laobie.github.io/android/2016/02/14/android-studio-tips.html| android studio tips]]
* [[https://github.com/jiang111/awesome-android-tips|awesome android tips]] * [[https://github.com/jiang111/awesome-android-tips|awesome android tips]]
* [[.:mediacodec]]
* ^_^[[https://zhuanlan.zhihu.com/p/147322501|TextureView与UI主线程的干扰、帧率正常但卡顿抖动问题的解释]]
* [[https://www.cnblogs.com/crazii/p/3875033.html|OpenSLES and AAC related]]
* [[https://android.googlesource.com/platform/frameworks/wilhelm/+/master/tests/examples/slesTestDecodeAac.cpp|DecodeAAC example code]]
* [[https://android.googlesource.com/platform/frameworks/wilhelm/+/master/include/SLES|OpenSLES header files]]
* [[https://www.jianshu.com/p/38015afcdb58|Android事件分发机制详解]]
===== Libs ===== ===== Libs =====
* [[https://code.google.com/p/androidsvg|AndroidSVG]] * [[https://code.google.com/p/androidsvg|AndroidSVG]]
* [[https://github.com/greenrobot/EventBus|EventBus 消息分发库]]
===== ADB ===== ===== ADB =====
* [[https://developer.android.com/tools /help /adb.html |Android Debug Bridge]] * [[https://developer.android.com/studio /command-line /adb|Android Debug Bridge]] <--大部分命令行需求都可以从这个官方文档中获得,包括文件拷贝、应用管理、包管理、网络转发、截屏录屏及其它。
* 装完驱动,打开USB调试, 连接电脑后, 就可以用 adb 工具来连接内置shell <code bash> * 装完驱动,打开USB调试, 连接电脑后, 就可以用 adb 工具来连接内置shell <code bash>
adb shell adb shell
</code> </code>
* 拷贝文件: ''adb pull <remote> <local> '', ''adb push <local> <remote>'' * 拷贝文件: ''adb pull <remote> <local> '', ''adb push <local> <remote>''
* 获取系统版本:''getprop ro.build.version.release''
* 获取系统api版本:''getprop ro.build.version.sdk''
* 获取cpu信息:''cat /proc/cpuinfo''
* 获取网络IP配置:''netcfg''
* 获取网络信息: ''netstat''
* 获取开机时间: ''cat /proc/stat | grep btime'', 为 unixtime格式, 或者 ''cat /proc/uptime'', 第一个时间为开机至今运行秒数
===== API ===== ===== API =====
* **应用入口**, 在''AndroidManifest.xml''中的 相应 Activity 下添加以下:<code xml> * **应用入口**, 在''AndroidManifest.xml''中的 相应 Activity 下添加以下:<code xml>
* 办法二: 修改项目gradle.properties文件,添加下面一行代码:<code> * 办法二: 修改项目gradle.properties文件,添加下面一行代码:<code>
org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m</code> org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m</code>
* Gradle 的代理设置,如果是 socks5 代理, 得在项目 gradle.properties 添加如下设置<code> * Gradle 的代理设置,如果是 socks5 代理, 得在项目 gradle.properties 添加如下设置<code>org.gradle.jvmargs=-DsocksProxyHost=<your-socks5-ip> -DsocksProxyPort=<your-socks5-port></code>
org.gradle.jvmargs=-DsocksProxyHost=<your-socks5-ip> -DsocksProxyPort=<your-socks5-port></code> * cocos2d-x 在安卓上使用的是 ''android.opengl.GLSurfaceView'' 来渲染. [[https://developer.android.com/reference/android/view/SurfaceView|SurfaceView]] 独立于窗口绘制表面,即拥有单独的重绘机制,与父窗口脱离。详细见[[https://source.android.com/devices/graphics/architecture|官方文档:图形架构]]
* ubuntu交叉编译Android armv7 的 ''ethtool'' 工具备忘:<code>
# 编译依赖 libmnl
git clone git://git.netfilter.org/libmnl
cd libmnl
./autogen.sh
./configure --host=--host=arm-linux-gnueabi CC=/home/oak/work/tools/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi30-clang LDFLAGS=-static
make
sudo make install # 默认是安装到 /usr/local/lib/
# 编译 ethtool
git clone https://kernel.googlesource.com/pub/scm/network/ethtool/ethtool # 需科学上网
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --host=arm-linux-gnueabi CC=/home/oak/work/tools/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi30-clang LDFLAGS=-static
make
</code>静态编译,需要使用大于28版本的ndk clang, 否则编译出来的ethtool运行时会报错''error: "ethtool": executable's TLS segment is underaligned: alignment is 8, needs to be at least 32 for ARM Bionic''
* NDK [[https://developer.android.com/ndk/guides/asan#ndk-build|Address Sanitizer]]
* ndk-build 默认会把生成的 .so 文件的debug符号给去掉(linux 下可用''file xxx.so'' 来查看是否带有符号); 未去掉符号的.so文件在 ''$PROJECT_PATH/obj/local/<abi>/''目录下; 详情可见 [[https://developer.android.com/ndk/guides/ndk-stack|ndk-stack ]] 使用说明
* aar 打包也有个步骤是去掉 .so 文件的debug符号。
* Android Studio build窗口乱码[[https://blog.csdn.net/github_2011/article/details/109135258|解决办法]]:
* 「Help」-> 「Edit Custom VM Options...」
* 添加 ''-Dfile.encoding=UTF-8''
* 重启 Android Studio
* [[https://developer.android.com/ndk/guides/audio/opensl|OpenSLES ]]编程 destroy obj 时,有一定概率会死锁卡住,报错 ''pthread_mutex_lock_timeout_np returned 110'', 此时可以延时 destroy 来规避这个问题。这应该是 Android源码本身的问题