Determine whether apk contains a certain class or so file in Android

1. Determine whether a certain class exists

public static boolean isDemoExist() {
		boolean isWoExist = true;
		try {
			Class.forName("com.test.Demo");
		} catch (Exception ex) {
			isWoExist = false;
		}
		return isWoExist;
	}

2. Determine whether the .so file exists

try {
    //ApplicationInfo:用于封装应用的信息
    ApplicationInfo info = application.getApplicationInfo();
    String dataDir = info.dataDir;// 存放数据的路径  应用数据目录。
    String nativeLibraryDir = info.nativeLibraryDir;// 本地路径  JNI本地库存放路径。
    String sourceDir = info.sourceDir;// 资源路径  应用APK的全路径
    String publicSourceDir = info.publicSourceDir;// 公共资源路径
    int targetSdkVersion = info.targetSdkVersion;//  // 应用所需的最小sdk版本
    Log.e(PlatformLog.TAG,"dataDir: "+dataDir);
    Log.e(PlatformLog.TAG,"nativeLibraryDir: "+nativeLibraryDir);
    Log.e(PlatformLog.TAG,"sourceDir: "+sourceDir);
    Log.e(PlatformLog.TAG,"publicSourceDir: "+publicSourceDir);
    Log.e(PlatformLog.TAG,"targetSdkVersion: "+targetSdkVersion);
    ZipFile file = new ZipFile(info.sourceDir);
    String[] soPath = {"arm64-v8a","armeabi-v7a","armeabi","x86_64","x86"};
    for (String path : soPath) {
        ZipEntry zipEntry = file.getEntry("lib/"+path+"/xxx.so");
        if (zipEntry != null) {
            //so文件存在
            //加载OAID so文件
            System.loadLibrary("xxx");
            break;
        }
    }
} catch (IOException e) {
    e.printStackTrace();
    Log.e(TAG,"so文件异常: "+e.toString());
}

Guess you like

Origin blog.csdn.net/u010263943/article/details/128251344