
我已经尝试过使用AssetManager,但为了保持文件夹结构的完整性,似乎会涉及大量的代码,对于一个简单的任务,比如我所提到的.我已经转而专注于尝试将APK视为ZIP文件并以这种方式提取其内容.但这要求我找到APK的确切路径.
在普通的AndroID应用程序中,可以使用getPackageCodePath,但这是一个附加到Context类的抽象方法.我的问题是如何在不使用普通活动时获取APK的确切路径?
此外,我尝试通过JNI调用getPackageCodePath,但由于无法找到该方法而导致应用程序崩溃.
编辑:
这甚至可能吗?
voID androID_main(struct androID_apP* state) { struct engine engine; ANativeActivity* activity = state->activity; jnienv* env = activity->env; jclass clazz = (*env)->GetobjectClass(env,activity->clazz); jmethodID methodID = (*env)->getmethodID(env,clazz,"getPackageCodePath","()Ljava/lang/String;"); jobject result = (*env)->CallObjectMethod(env,activity->clazz,methodID); const char* str; jboolean iscopy; str = (*env)->GetStringUTFChars(env,(Jstring)result,&iscopy); LOGI("Looked up package code path: %s",str); ...} 不过,我觉得这可能不是一个很好的解决方案.有两件事让我担心:
>线程安全 – 关于在主Java线程中仅使用ANativeActivity的env成员有一个丑陋的警告,如果我理解正确,这段代码将在本机活动的线程中运行.
> ANativeActivity的clazz成员似乎被错误命名,实际上是Java NativeActivity的实例而不是类对象.否则此代码将无效.我真的很讨厌依赖于这样明显错误名称的东西.
除此之外,它有效,我实际上是要自己使用它来尝试使用libzip从数据目录中提取资源.apk.
总结以上是内存溢出为你收集整理的使用C和NativeActivity类获取Android APK的名称全部内容,希望文章能够帮你解决使用C和NativeActivity类获取Android APK的名称所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)