當前位置:首頁 » 安卓系統 » android找不到so文件

android找不到so文件

發布時間: 2024-12-15 10:50:13

㈠ android 5.0替換so文件後讀取失敗

首先,這里你說的不是很清楚,我就大致回答一下。

一般,so是放在/data/data/packagename/lib下面,嗯,這是表象,在/data/data/packagename/目錄下執行ls -l,會發現lib只是一個連接,lib -> /data/app-lib/packagename-n,就是你的so其實是放在/data/app-lib/packagename-n下的,System.loadLibrary(name)查找應用so一般就是在/data/app-lib下。你如果想修改so,必須有/data/app-lib/操作許可權然後更改so的相應許可權,比如使用root許可權可以操作,這里還需要防止系統重啟時重新替換so,嗯,它有存你的apk,必要時還原相關文件。如果你新建/data/data/packagename/lib目錄,但是System.loadLibrary(name)尋找so的目錄不包含你這個目錄,所以無法找到so。

那其實還有另一種做法,就是利用sd卡的操作許可權,把so放到sd卡上,更改許可權為7XX,然後使用System.load(path)這個方法載入指定的so,已測可用。

祝你成功!

㈡ 如何載入so文件 android

android中載入so文件:

在Android中調用動態庫文件(*.so)都是通過jni的方式,而且往往在apk或jar包中調用so文件時,都要將對應so文件打包進apk或jar包,工程目錄下圖:

Android中載入so文件的提供的API:

void System.load(String pathName);

說明:

1、pathName:文件名+文件路勁;

2、該方法調用成功後so文件中的導出函數都將插入的系統提供的一個映射表(類型Map);

3、具體代碼如下:

try {
String localPath = Environment.getExternalStorageDirectory() + path;
Log.v(TAG, "LazyBandingLib localPath:" + localPath);

String[] tokens = mPatterns.split(path);
if (null == tokens || tokens.length <= 0
|| tokens[tokens.length - 1] == "") {
Log.v(TAG, "非法的文件路徑!");
return -3;
}
// 開辟一個輸入流
File inFile = new File(localPath);
// 判斷需載入的文件是否存在
if (!inFile.exists()) {
// 下載遠程驅動文件
Log.v(TAG, inFile.getAbsolutePath() + " is not fond!");
return 1;
}
FileInputStream fis = new FileInputStream(inFile);

File dir = context.getDir("libs", Context.MODE_PRIVATE);
// 獲取驅動文件輸出流
File soFile = new File(dir, tokens[tokens.length - 1]);
if (!soFile.exists()) {
Log.v(TAG, "### " + soFile.getAbsolutePath() + " is not exists");
FileOutputStream fos = new FileOutputStream(soFile);
Log.v(TAG, "FileOutputStream:" + fos.toString() + ",tokens:"
+ tokens[tokens.length - 1]);

// 位元組數組輸出流,寫入到內存中(ram)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
// 從內存到寫入到具體文件
fos.write(baos.toByteArray());
// 關閉文件流
baos.close();
fos.close();
}
fis.close();
Log.v(TAG, "### System.load start");
// 載入外設驅動
System.load(soFile.getAbsolutePath());
Log.v(TAG, "### System.load End");

return 0;

} catch (Exception e) {
Log.v(TAG, "Exception " + e.getMessage());
e.printStackTrace();
return -1;

}

安卓手機如何打開.so文件

安卓手機無法直接打開.so文件。

.so文件是Linux和Unix系統中的共享庫文件,類似於Windows系統中的.dll文件。在Android系統中,.so文件通常用於存儲編譯後的C/C++代碼,以供Java或Kotlin等語言通過JNI(Java Native Interface)調用。這些文件是二進制格式,因此無法直接在安卓手機上打開查看或編輯。

要在安卓手機上使用.so文件,你需要將其嵌入到你的Android應用程序中。這通常涉及到在Android項目的構建腳本(如build.gradle)中配置NDK(Native Development Kit)編譯選項,以便在編譯應用程序時包含.so文件。這樣,當應用程序在安卓設備上運行時,它可以載入並使用這些.so文件中的本地代碼。

需要注意的是,直接在安卓設備上查看或編輯.so文件是不可能的,因為它們是以二進制形式編譯的,而不是以人類可讀的文本形式存儲的。如果你需要查看或編輯這些代碼,你需要在開發環境中使用相應的工具,如C/C++編譯器和調試器,來查看和編輯源代碼,然後重新編譯生成.so文件。

綜上所述,安卓手機無法直接打開.so文件,但你可以通過將其嵌入到你的Android應用程序中來使用它們。如果你需要查看或編輯這些代碼,你需要在開發環境中使用相應的工具來操作源代碼。

㈣ android應用.so文件路徑

.so文件是自動生成的,必須放在libs/armeabi目錄下(不然程序絕對找不到),注意,現在一般都是libs目錄了吧。

㈤ android studio JNI開發時 編譯成功 但是沒有生成.so文件 什麼原因

(1)老版本,方法如下:taskNativeLibs(type:Copy){from(newFile(project(':MyProject').buildDir,'native-libs')){include'**/*.so'}intonewFile(buildDir,'native-libs')}tasks.withType(Compile){compileTask->compileTask.dependsOnNativeLibs}clean.dependsOn'cleanCopyNativeLibs'tasks.withType(com.android.build.gradle.PackageApplicationTask){pkgTask->pkgTask.jniDirnewFile(buildDir,'native-libs')}(2)新版本三種方法:(2.1)打包前先生成.Jar文件後自動解包到apk文件tasknativeLibsToJar(type:Zip,description:''){destinationDirfile("$buildDir/native-libs")baseName'native-libs'extension'jar'fromfileTree(dir:'libs',include:'**/*.so')into'lib/'}tasks.withType(Compile){compileTask->compileTask.dependsOn(nativeLibsToJar)}下面一句話就是打包生成目錄(build\native-libs)中的.jar文件compilefileTree(dir:"$buildDir/native-libs",include:'native-libs.jar')(2.2)手動生成.Jar文件後自動解包到apk文件這個方式需要自己手動進行.SO文件壓縮,具體步驟為:將所有需要使用的.so文件壓縮為.zip文件(zip中的文件目錄結構為:lib/armeabi/*.so)然後把zip文件後綴改為.Jar然後放到libs生成apk就ok默認就是自動打包所有.Jar文件:dependencies{compilefileTree(dir:'libs',include:'*.jar')}(2.3)這也就是現在正在使用的方式(推薦),其實無非就是把.SO文件打包到APK的lib文件夾中,假如仔細閱讀了Gradle的使用方法,自然就知道其實Gradle官方在新版已經自動實現了打包.SO文件的.很簡單級就是在配置的android節點下加入下面的內容就ok:sourceSets{main{jniLibs.srcDirs=['libs']}}其他地方無需修改,整個項目的配置文件如下:applyplugin:'android'android{"19.0.0"defaultConfig{"1.0"}buildTypes{release{('proguard-android.txt'),'proguard-rules.txt'}}sourceSets{main{jniLibs.srcDirs=['libs']}}}dependencies{compilefileTree(dir:'libs',include:['*.jar'])}

㈥ android studio 怎麼添加.so文件

android studio中添加.so文件的方法如下:

  1. 在文件夾src/main中添加一個名為jniLibs的文件夾,並把.so文件復制到該文件夾中,如圖所示:

熱點內容
我的世界伺服器好評復制 發布:2024-12-15 13:36:14 瀏覽:608
伺服器私有雲怎麼收費 發布:2024-12-15 13:33:54 瀏覽:770
steam怎麼更改密碼 發布:2024-12-15 13:25:16 瀏覽:348
如何系統集成配置管理 發布:2024-12-15 13:25:15 瀏覽:422
冰箱壓縮機運轉 發布:2024-12-15 13:23:52 瀏覽:14
c語言按任意鍵返回 發布:2024-12-15 13:09:11 瀏覽:694
21款創行版都有哪些配置 發布:2024-12-15 13:08:10 瀏覽:106
gcc可以編譯apk 發布:2024-12-15 13:00:13 瀏覽:262
手機qq保存的文件在哪個文件夾 發布:2024-12-15 12:59:36 瀏覽:441
pingwindowslinux 發布:2024-12-15 12:50:55 瀏覽:406