Android系统TARGET_BUILD_VARIANT由eng变为userdebug导致的编译/运行问题

来源:互联网 发布:房屋设计画图软件 编辑:程序博客网 时间:2024/06/07 08:14

一、源码编译app

mm

报错:

Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerWarning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManagerNote: com.google.gson.internal.UnsafeAllocator accesses a declared field 'theUnsafe' dynamicallyNote: com.google.gson.internal.UnsafeAllocator accesses a method 'allocateInstance(java.lang.Class)' dynamically      Maybe this is library method 'sun.misc.Unsafe { java.lang.Object allocateInstance(java.lang.Class); }'Note: android.support.v4.text.ICUCompatIcs accesses a method 'getScript(java.lang.String)' dynamically      Maybe this is program method 'android.support.v4.text.ICUCompat { java.lang.String getScript(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImpl { java.lang.String getScript(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImplBase { java.lang.String getScript(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImplIcs { java.lang.String getScript(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompatIcs { java.lang.String getScript(java.lang.String); }'      Maybe this is library method 'libcore.icu.ICU { java.lang.String getScript(java.lang.String); }'Note: android.support.v4.text.ICUCompatIcs accesses a method 'addLikelySubtags(java.lang.String)' dynamically      Maybe this is program method 'android.support.v4.text.ICUCompat { java.lang.String addLikelySubtags(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImpl { java.lang.String addLikelySubtags(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImplBase { java.lang.String addLikelySubtags(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompat$ICUCompatImplIcs { java.lang.String addLikelySubtags(java.lang.String); }'      Maybe this is program method 'android.support.v4.text.ICUCompatIcs { java.lang.String addLikelySubtags(java.lang.String); }'      Maybe this is library method 'libcore.icu.ICU { java.lang.String addLikelySubtags(java.lang.String); }'Note: there were 4 accesses to class members by means of introspection.      You should consider explicitly keeping the mentioned class members      (using '-keep' or '-keepclassmembers').Warning: there were 8 unresolved references to classes or interfaces.         You may need to specify additional library jars (using '-libraryjars'),         or perhaps the '-dontskipnonpubliclibraryclasses' option.Error: Please correct the above warnings first.

二、尝试修改

在Android.mk中加入

LOCAL_PROGUARD_FLAG_FILES := proguard.flags
proguard.flags
-ignorewarnings
直接忽略编译错误。

结果导致运行时jni报错:

java.lang.NoSuchMethodError:
单独写apk没有这个问题

双向jni调用

三、问题解决

1.输入命令

TARGET_BUILD_VARIANT=eng
2.将之前的proguard.flags去除

结果:不会出现编译错误

3.运行正常

四、分析

该问题和ProGuard工具工具有关;该工具在user和userdebug模式下自动打开。

ProGuard是一个免费的开源项目,用以压缩、优化、混淆代码,Android 源码集成了proguard,默认会在usr以及usrdebug模式下开启。

该问题原因在于:ProGuard会扫描并去除java类中没有用到的函数。native方法没有被调用时,也会被去除。

转载:Android 4.0 中由ProGuard引发的一场血案

也可以在Adnroid.mk中添加如下解决:

LOCAL_PROGUARD_ENABLED := disable
转载:Android App中包含JNI方法时慎用ProGuard


0 0
原创粉丝点击