package com.example.slf.pulse_manager.widgets;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Build;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class NativeLoader {
private final static int LIB_VERSION = 4;
private final static String LIB_NAME = "chat." + LIB_VERSION;
private final static String LIB_SO_NAME = "lib" + LIB_NAME + ".so";
private final static String LOCALE_LIB_SO_NAME = "lib" + LIB_NAME + "loc.so";
private static volatile boolean nativeLoaded = false;
private static File getNativeLibraryDir(Context context) {
File f = null;
if (context != null) {
try {
f = new File((String)ApplicationInfo.class.getField("nativeLibraryDir").get(context.getApplicationInfo()));
} catch (Throwable th) {
th.printStackTrace();
}
}
if (f == null) {
f = new File(context.getApplicationInfo().dataDir, "lib");
}
if (f != null && f.isDirectory()) {
return f;
}
return null;
}
private static boolean loadFromZip(Context context, File destDir, File destLocalFile, String folder) {
try {
for (File file : destDir.listFiles()) {
file.delete();
}
} catch (Exception e) {
Log.e(Constants.TAG, e.getMessage());
}
ZipFile zipFile = null;
InputStream stream = null;
try {
zipFile = new ZipFile(context.getApplicationInfo().sourceDir);
ZipEntry entry = zipFile.getEntry("lib/" + folder + "/" + LIB_SO_NAME);
if (entry == null) {
throw new Exception("Unable to find file in apk:" + "lib/" + folder + "/" + LIB_NAME);
}
stream = zipFile.getInputStream(entry);
OutputStream out = new FileOutputStream(destLocalFile);
byte[] buf = new byte[4096];
int len;
while ((len = stream.read(buf)) > 0) {
Thread.yield();
out.write(buf, 0, len);
}
out.close();
if (Build.VERSION.SDK_INT >= 9) {
destLocalFile.setReadable(true, false);
destLocalFile.setExecutable(true, false);
destLocalFile.setWritable(true);
}
try {
System.load(destLocalFile.getAbsolutePath());
nativeLoaded = true;
} catch (Error e) {
Log.e(Constants.TAG, e.getMessage());
}
return true;
} catch (Exception e) {
Log.e(Constants.TAG, e.getMessage());
} finally {
if (stream != null) {
try {
stream.close();
} catch (Exception e) {
Log.e(Constants.TAG, e.getMessage());
}
}
if (zipFile != null) {
try {
zipFile.close();
} catch (Exception e) {
Log.e(Constants.TAG, e.getMessage());
}
}
}
return false;
}
public static synchronized void initNativeLibs(Context context) {
if (nativeLoaded) {
return;
}
try {
String folder = null;
try {
if (Build.CPU_ABI.equalsIgnoreCase("armeabi-v7a")) {
folder = "armeabi-v7a";
} else if (Build.CPU_ABI.equalsIgnoreCase("armeabi")) {
folder = "armeabi";
} else if (Build.CPU_ABI.equalsIgnoreCase("x86")) {
folder = "x86";
} else if (Build.CPU_ABI.equalsIgnoreCase("mips")) {
folder = "mips";
} else {
folder = "armeabi";
//FileLog.e("tmessages", "Unsupported arch: " + Build.CPU_ABI);
}
} catch (Exception e) {
// FileLog.e("tmessages", e);
Log.e(Constants.TAG, e.getMessage());
folder = "armeabi";
}
String javaArch = System.getProperty("os.arch");
if (javaArch != null && javaArch.contains("686")) {
folder = "x86";
}
File destFile = getNativeLibraryDir(context);
if (destFile != null) {
destFile = new File(destFile, LIB_SO_NAME);
if (destFile.exists()) {
try {
System.loadLibrary(LIB_NAME);
nativeLoaded = true;
return;
} catch (Error e) {
Log.e(Constants.TAG, e.getMessage());
}
}
}
File destDir = new File(context.getFilesDir(), "lib");
destDir.mkdirs();
File destLocalFile = new File(destDir, LOCALE_LIB_SO_NAME);
if (destLocalFile != null && destLocalFile.exists()) {
try {
System.load(destLocalFile.getAbsolutePath());
nativeLoaded = true;
return;
} catch (Error e) {
Log.e(Constants.TAG, e.getMessage());
}
destLocalFile.delete();
}
if (loadFromZip(context, destDir, destLocalFile, folder)) {
return;
}
/*
folder = "x86";
destLocalFile = new File(context.getFilesDir().getAbsolutePath() + "/libtmessages86.so");
if (!loadFromZip(context, destLocalFile, folder)) {
destLocalFile = new File(context.getFilesDir().getAbsolutePath() + "/libtmessagesarm.so");
folder = "armeabi";
loadFromZip(context, destLocalFile, folder);
}
*/
} catch (Throwable e) {
e.printStackTrace();
}
try {
System.loadLibrary(LIB_NAME);
nativeLoaded = true;
} catch (Error e) {
Log.e(Constants.TAG, e.getMessage());
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
为挑战杯做的一个app展示模板.zip
共122个文件
xml:40个
java:30个
png:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 132 浏览量
2023-11-09
01:29:40
上传
评论
收藏 1.35MB ZIP 举报
温馨提示
挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考 挑战杯大赛相关代码、设计文档、使用说明,供备赛参赛人员参考
资源推荐
资源详情
资源评论
收起资源包目录
为挑战杯做的一个app展示模板.zip (122个子文件)
gradlew.bat 2KB
.gitignore 91B
.gitignore 7B
build.gradle 678B
build.gradle 498B
settings.gradle 15B
gradlew 5KB
app.iml 8KB
Pulse_Manager.iml 944B
gradle-wrapper.jar 49KB
NativeLoader.java 6KB
ConsultationActivity.java 6KB
ShopDetailActivity.java 5KB
ChatListAdapter.java 4KB
AndroidUtilities.java 4KB
MainActivity.java 3KB
NotificationCenter.java 3KB
MyFragment3.java 3KB
MyFragment1.java 3KB
MyFragmentPagerAdapter.java 2KB
ChatLayout.java 2KB
MedicineListAdapter.java 2KB
ShopListAdapter.java 2KB
SizeNotifierRelativeLayout.java 2KB
BookListAdapter.java 1KB
Medicine.java 1KB
MyFragment4.java 1KB
Shop.java 1KB
WelcomeActivity.java 999B
ChatMessage.java 929B
Book.java 801B
MyFragment2.java 686B
App.java 591B
TreatmentRecordActivity.java 415B
ArticleActivity.java 398B
ApplicationTest.java 360B
ExampleUnitTest.java 322B
Constants.java 166B
Status.java 131B
UserType.java 130B
shop4.jpg 193KB
shop2.jpg 181KB
shop6.jpg 149KB
stars2.jpg 117KB
image_book3.jpg 96KB
book1.jpg 95KB
background.jpg 88KB
shop5.jpg 84KB
medicine5.jpg 69KB
medicine4.jpg 44KB
image_book2.jpg 33KB
medicine3.jpg 31KB
shop1.jpg 28KB
shop3.jpg 17KB
medicine2.jpg 8KB
image_book4.jpg 7KB
.name 13B
medicine1.png 33KB
stars.png 31KB
shopping_cart.png 16KB
my_head.png 14KB
tab_two_normal.png 9KB
tab_two_pressed.png 8KB
tab_three_pressed.png 7KB
tab_three_normal.png 6KB
tab_four_normal.png 6KB
tab_four_pressed.png 6KB
tab_one_normal.png 6KB
tab_one_pressed.png 4KB
ic_launcher.png 4KB
ic_msg_panel_smiles.png 2KB
ic_chat_send.png 2KB
heartbeat.png 2KB
add_to_car.png 2KB
balloon_incoming_normal.9.png 1KB
balloon_outgoing_normal.9.png 1KB
ic_double_tick.png 1KB
ic_single_tick.png 1KB
ic_chat_send_active.png 1001B
proguard-rules.pro 655B
gradle.properties 855B
gradle-wrapper.properties 230B
fragment4.xml 9KB
sell_item.xml 4KB
medicine_item.xml 4KB
fragment3.xml 3KB
content_consultation.xml 3KB
content_shop_detail.xml 3KB
activity_article.xml 3KB
misc.xml 3KB
activity_main.xml 2KB
fragment_1.xml 2KB
chat_user1_item.xml 2KB
chat_user2_item.xml 2KB
book_item.xml 2KB
styles.xml 2KB
AndroidManifest.xml 1KB
activity_shop_detail.xml 1KB
activity_consultation.xml 1KB
activity_treatment_record.xml 817B
共 122 条
- 1
- 2
资源评论
辣椒种子
- 粉丝: 3320
- 资源: 5724
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功