作者:燕歆波
导读:android如何检测应用本身被卸载了,统计卸载量!
1.首先检查自己的Android studio上有没有装ndk,右击项目根目录–>open module setting,查看Android NDK location,如果安装了,则会显示路径,没有安装就点击安装,安装后在local.properties文件中会出现ndk路径
2.新建一个类,编写本地提供的对外的native入口
···
public class LoadJni {
static {
System.loadLibrary("uninstall");
}
public static native String listenUnInstall();
}
···
3.在gradle.properties中配置可以使用ndk:
android.useDeprecatedNdk=true
4.编译项目: Build–>Make Project 会在app->build–>classes->debug下面生成class文件
5.生成.h文件 打开Terminal窗口,在命令行中先进入到工程的 main 目录下 (cd app\src\main),默认在项目根目录下:
然后输入命令:javah -d jni -classpath 自己编译后的 class 文件的绝对路径例如:
“`
javah -d jni -classpath C:\fanhua-project-android\JniTest\app\build\intermediates\classes\debug com.baitu.jnitest.UnInstallListen
运行成功后,会在main目录下生成jni文件夹,jni文件夹下有我们生成的.h文件
6.编写.c实现类,这个类就是我们真正实现功能的类,由c编写,请注意.c文件中的名称和你生成的.h的名称相同:

7.gradle中配置so库生成信息:在android-defaultConfigure下配置:
ndk{
moduleName "uninstall" //生成so的名称
abiFilters "arm64-v8a", "armeabi-v7a", "x86","x86_64" //输出制定三种abi体系结构下的so库
}
8.再次编译,如果提示Android.mk的问题,请在app-build-intermediates-ndk-debug找到Android.mk文件,并将文件复制到jni目录下,然后
在build.gradle的android节点下配置
externalNativeBuild{
ndkBuild{
path "src/main/jni/Android.mk"
}
}
9.android.useDeprecatedNdk=true,如果提示错误请根据提示:android.deprecatedNdkCompileLease=1536904725842,后面的数字是时间
10。重新编译,会在app-build-intermediates-ndkbuild目录下产出so文件,这样,我们就得到了.so文件,
11.为了测试,我们新建一个项目,新建jniLibs文件夹,将so文件放到里面,然后参考第二步:将对外提供的native接口类也复制到新建的项目下,需要注意,native接口类所在的目录路径和当前路径要相同,然后我们直接在新建项目的MainActivity中调用:
((TextView) findViewById(R.id.tv_channel)).setText(LoadJni.listenUnInstall());//LoadJni就是对外提供接口的类
注:
使用时步骤:将so库复制到项目的jniLibs目录下,需要注意的是要将提供的native接口所在的类也要复制到相同的目录下(这里是fanhua.com.umengstastics.LoadJni),复制以后,LoadJni的路径要保持不变
最后总结流程:
1.编写native方法(java声明)
2.编译生成class文件
3.编译生成h文件
4.编写C文件
5.配置NDK
6.配置so库
7.在Activity调用
“`
参考文章: