一、源码编译app
mm
报错:
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Warning: com.android.tvmanagerzhongjian.TvManagerinterface: can't find referenced class android.app.TvManager
Note: com.google.gson.internal.UnsafeAllocator accesses a declared field 'theUnsafe' dynamically
Note: 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没有这个问题
三、问题解决
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