NDK交叉编译及so库导入Android项目
个人博客
http://www.milovetingting.cn
前言记录NDK交叉编译及so库导入Android项目的简单步骤,以备后续用到时查看。
环境在Linux和Mac环境下,分别编译输出so库。
Red Hat Enterprise Linux 8 64 位 使用GCC编译(也可以用CLANG,这里演示用GCC)
macOS Big Sur 11.3.1 使用CLANG编译(也可以用GCC,这里演示用CLANG)
下载NDK
这里只演示下载NDK17,项目中Mac用到的NDK版本为NDK21
下载NDK1wget https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip
NDK18及之后的NDK版本,建议使用CLANG编译。
解压NDK1unzip android-ndk-r17c-linux-x86_64.zip
解压后得到android-ndk-r17c文件夹
编写头文件及c文件GCC编译12345#include "get.h"int get( ...
Artifactory搭建本地仓库(二)-通过Gradle上传AAR
个人博客
http://www.milovetingting.cn
前言在上一篇文章 Artifactory搭建本地仓库 中,已经搭建好了本地仓库,这一篇,主要介绍在Android Studio中通过Gradle上传AAR到本地仓库,以便其它项目引用。
上传AAR
在项目根目录下的gradle文件的dependencies节点增加
1classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.2"
完整的gradle
123456789101112131415161718192021222324252627// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { maven{ url 'http://localhos ...
阿里云HttpDns接入
个人博客
http://www.milovetingting.cn
前言简单记录集成阿里云HTTPDNS服务的过程
什么是HTTPDNS
HTTPDNS是面向多端应用(移动端APP,PC客户端应用)的域名解析服务,具有域名防劫持、精准调度、实时解析生效的特性。
以上来自阿里云HTTPDNS文档。
接入流程服务开通HTTPDNS是移动研发平台提供的服务,请参考EMAS 快速入门开通服务。
开通服务后,进入控制台,点击添加产品
完成添加产品后,点击添加应用
添加应用完成后,点击刚才添加的应用
查看Account ID,这个id后面配置dns会用到
在域名列表中添加域名
Android SDK 接入
在项目根目录下的build.gradle文件中添加Maven仓库地址
1234567allprojects { repositories { maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/ ...
Android电量优化-Battery Historian环境搭建及简单使用
个人博客
http://www.milovetingting.cn
Android电量优化-Battery Historian环境搭建及简单使用前言在Android5.0后,Batterystats已经内置在Android系统中,用于收集设备上的电池数据。可以使用adb将收集的电池数据导出,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 直观视图。
在Android8.0后,也可通过Android Studio的Profiler-Energy工具查看,这里不再多介绍。
安装DockerBattery Historian可以通过Docker来安装,也可以直接下载Battery Historian源码编译。
通过源码编译的方式,步骤较多,过程较复杂。这里不多介绍。
最简单的方法是通过Docker来安装。
安装Docker安装Docker,可以在官网上下载对应系统平台的安装包,可以参考这个链接:https://yeasy.gitbook.io/docker_prac ...
Crash监控的简单实现方案
个人博客
http://www.milovetingting.cn
Crash监控的简单实现方案前言本文从Java层及Native展开,简单记录Android中的Crash监控方案。
Java层CrashJava层的crash监控,可以通过实现Thread.UncaughtExceptionHandler接口,重写uncaughtException方法来实现,简单示意代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142public class CrashHandler implements Thread.UncaughtExceptionHandler { private static Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler; private static Context mContext; private static String mPath; pu ...
KMM跨平台开发环境搭建
个人博客
http://www.milovetingting.cn
KMM跨平台开发环境搭建KMM是什么
KMM即Kotlin Multiplatform Mobile ,是由Jetbrains提供的跨平台移动开发SDK,借助 Kotlin的跨平台能力,可以使用一个工程为多个平台编译。
使用 KMM,具备灵活性的同时也保留了原生编程的优势。为 Android/iOS 应用程序的业务逻辑代码使用单一的代码库,仅在需要的时候编写平台特定代码,例如实现原生的 UI,使用平台特定 API 等等。
KMM 可以和你的工程无缝集成。共享代码,使用 Kotlin 编写,使用 Kotlin/JVM 编译成 JVM 字节码,使用 Kotlin/Native 编译成二进制,所以你可以和使用其他一般类库一样使用 KMM 业务逻辑模块。
KMM环境搭建配置KMM插件
打开Android Studio,点击Configure-Plugins
在plugins中搜索KMM,然后选择安装
安装后需要重启IDE
点击Restart
重启IDE后,选择创建Android ...
IntelliJ-Idea导出可执行Jar
个人博客
http://www.milovetingting.cn
IntelliJ-Idea导出可执行Jar前言IntelliJ Idea 导出可执行Jar包,记录如下。
创建Java文件,在里面添加main方法配置ArtifactsFile-Project Structure-Project Settings-Artifacts
点击+号
点击JAR-From modules with dependencies…
选择Main Class
点击Build-Build Artifacts
点击Build
可以看到,已经在out目录下生成了jar
C++中的常量指针和指针常量
个人博客
http://www.milovetingting.cn
C++中的常量指针和指针常量常量指针123456789101112int a = 1;int b = 2;//定义一个常量指针const int *p = &a;cout << *p << endl;//输出1p = &b;cout << *p << endl;//输出2//报错,常量指针不可以修改指针指向的值//*p = 2;
指针常量123456789101112int a = 1; int b = 2; int * const p = &a; cout << *p << endl;//输出1 *p = 2; cout << *p << endl;//输出2 cout << a << endl;//输出2 //报错,指针常量不可以修改指针的指向 //p = &b;
C++函数的分文件编写
个人博客
http://www.milovetingting.cn
C++函数的分文件编写创建头文件创建一个后缀为.h的头文件,在头文件中声明函数
12//函数的声明void hello();
创建源文件创建一个后缀为.cpp的源文件,在源文件里定义函数
12345678#include <iostream>using namespace std;//函数的定义void hello(){ cout << "hello,world" << endl;}
调用函数引用刚才定义的头文件,并调用定义的函数
123456#include "hello.h"int main() { hello(); return 0;}
CLion输出乱码的解决方法
个人博客
http://www.milovetingting.cn
CLion输出乱码的解决方法
File->Settings->Editor->File Encodings
然后设置