Какие активы используются в проекте библиотеки?
В одном из моих библиотечных проектов происходит что-то волшебное. В то время как макеты (res/layout) выбираются из самого проекта библиотеки, файлы в папке ресурсов выбираются из вызывающего проекта (а не проекта библиотеки).
В настоящее время я создаю справочную деятельность в проекте библиотеки. Вызывающий проект дает имя файла деятельности в проекте библиотеки. Файлы хранятся в вызывающем проекте, а не в проекте библиотеки.
При использовании AssetsManager в проекте библиотеки он использует файлы из вызывающего проекта, а не из папки активов проекта библиотеки.
Это правильное поведение?
Вот упрощенный вызов Activity в корневом проекте:
// Calling Project
package aa.bb.aa;
public class MyListActivity extends ListActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.mylistactivity); // <--- Stored in resources of the calling project
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.men_help) {
Intent intent = new Intent(this, aa.bb.bb.MyFileBrowser.class);
intent.putExtra(MyConstants.FILE, "mylistactivity.html"); // <-- Stored in assets of the calling project
startActivityForResult(intent, MyConstants.DIALOG_HELP);
return true;
}
return super.onOptionsItemSelected(menuItem);
}
}
А вот и проект "Активность в библиотеке". Я думал, что активы выбираются отсюда, а не из вызывающей деятельности / проекта:
// Library project
package aa.bb.bb;
public class MyFileBrowser extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.myfilebrowser); // <-- Stored in resources of the library project
webView = (WebView) findViewById(R.id.browser);
Locale locale = Locale.getDefault();
String localeLanguage = (locale.getLanguage() != null) ? locale.getLanguage() : "en";
Bundle bundleExtras = getIntent().getExtras();
if (bundleExtras != null) {
String file = bundleExtras.getString(MyConstants.FILE);
if (!StringUtils.isEmpty(file)) {
String filename = "help-" + localeLanguage + File.separator + file;
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open(filename);
} catch (IOException ioException) {
filename = "help-en" + File.separator + file;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ioException) {
}
}
webView.loadUrl("file:///android_asset" + File.separator + filename); // <-- Uses file in assets of calling project - not library project
}
}
}
}
1 ответ
Нашел ответ. активы всегда используются из ссылочного проекта. Библиотечный проект не может содержать активы. Я нашел это на этой странице:
Вот часть документа, которая описывает это:
Инструменты не поддерживают использование необработанных файлов активов (сохраненных в каталоге assets /) в проекте библиотеки. Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets / самого проекта приложения. Однако файлы ресурсов, сохраненные в каталоге res /, поддерживаются.