作者:燕歆波

导读:android如何检测应用本身被卸载了,统计卸载量!

1.首先检查自己的Android studio上有没有装ndk,右击项目根目录–>open module setting,查看Android NDK location,如果安装了,则会显示路径,没有安装就点击安装,安装后在local.properties文件中会出现ndk路径

Android Studio编译特别慢 android studio编译运行_android

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的名称相同:
![这里写图片描述](https://img-blog.csdn.net/20180914162836832?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbnhpYW9zYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

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调用
“`

参考文章:

  1. Android Studio NDK 开发与调试(生成 .so 文件)
  2. Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
  3. 这里写链接内容
  4. Android studio简单使用JNI实例
  5. 在Android Studio中使用ndk-build
  6. Android源码分析实战之JNI so库加载System.loadLibrary流程分析
  7. 感谢这些作者!虽然最终没有实现检测卸载,但是了解了不少东西!