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.flagsproguard.flags
-ignorewarnings直接忽略编译错误。
结果导致运行时jni报错:
java.lang.NoSuchMethodError:单独写apk没有这个问题
双向jni调用
三、问题解决
1.输入命令
TARGET_BUILD_VARIANT=eng2.将之前的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
- Android系统TARGET_BUILD_VARIANT由eng变为userdebug导致的编译/运行问题
- Android编译选项eng、user、userdebug的区别
- Android编译选项user、userdebug和eng的区别
- Android编译选项eng、user、userdebug的区别 .
- Android源码编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- Android编译选项eng、user、userdebug的区别
- Android编译版本eng、user和userdebug的区别
- 第16周项目2-用指针玩字符串(3)字符串长度
- PRId64正确使用来保证跨平台
- 码农之路:我早该做好的5件事
- 《精通CSS与HTML设计模式》读书笔记3——盒模型位置
- HTML 5 存储
- Android系统TARGET_BUILD_VARIANT由eng变为userdebug导致的编译/运行问题
- 静态分析:IDA逆向代码段说明 text、idata、rdata、data
- LeetCode:Maximum Depth of Binary Tree
- ng-if和ng-show、ng-hide区别
- FFPLAY的原理(二)
- lighttpd安装与配置
- PHP是一门高效的网络编程语言
- Unexpected Exception caught setting 'age'-Error setting expression 'age' with value ['3']
- 第16周项目2-用指针玩字符串(4)字符串单词数