[DEV] Ressource overiding in org.lineageos.jelly - Xposed General

Hey! I try to override two XML string[] things from https://github.com/LineageOS/android_packages_apps_Jelly/tree/lineage-16.0 : https://github.com/LineageOS/androi....0/app/src/main/res/values/search_engines.xml
My code & the error: https://gist.github.com/nift4/9e27514e58fd50fb4bedbc4a573d7678
What do I wrong?

nift4 said:
Hey! I try to override two XML string[] things from https://github.com/LineageOS/android_packages_apps_Jelly/tree/lineage-16.0 : https://github.com/LineageOS/androi....0/app/src/main/res/values/search_engines.xml
My code & the error: https://gist.github.com/nift4/9e27514e58fd50fb4bedbc4a573d7678
What do I wrong?
Click to expand...
Click to collapse
Try using "array" instead of "string-array".

Thanks

It worked

Related

Theme Chooser themes, Windows, aapt, and uppercase letters in XML filenames

EDIT: A solution has been found, courtesy of XDA member titanic_fanatic, who compiled a Windows version of aapt that accepts uppercase letters in XML filenames! (Read his original message here.) I've attached it to this post. One of the biggest hurdles to effective theme creation in Windows is finally solved!
----------------------------------------------------------------------------------------​
Forgive me if this has already been asked, but I know that it's something that's annoyed theme developers under Windows for a while now. I seem to recall seeing hints about fixing this, but I've done search after search, and can't find it to save my life.
Theme Chooser theme developers under Windows are hobbled by the fact that XML filenames can't contain uppercase letters, which prevents us from theming certain applications (example: com_keramidas_TitaniumBackup.xml would be needed for Titanium Backup). I know that this is a problem related to aapt.exe. Has anyone come up with a workable solution for this issue? If not, I'd like to take a crack at it. I might not get anywhere, but I have nothing to lose.
Obviously, in order to do this, I'll need the source for it. I can do the heavy lifting regarding getting the source and working out how to compile it for Windows, but I need to know where the source is, what to get, and other requirements. If anyone can help and point me in the right direction(s), I'd really appreciate it!
MJPollard said:
Forgive me if this has already been asked, but I know that it's something that's annoyed theme developers under Windows for a while now. I seem to recall seeing hints about fixing this, but I've done search after search, and can't find it to save my life.
T-Mobile/CM7 theme developers under Windows are hobbled by the fact that XML filenames can't contain uppercase letters, which prevents us from theming certain applications (example: com_keramidas_TitaniumBackup.xml would be needed for Titanium Backup). I know that this is a problem related to aapt.exe. Has anyone come up with a workable solution for this issue? If not, I'd like to take a crack at it. I might not get anywhere, but I have nothing to lose.
Obviously, in order to do this, I'll need the source for it. I can do the heavy lifting regarding getting the source and working out how to compile it for Windows, but I need to know where the source is, what to get, and other requirements. If anyone can help and point me in the right direction(s), I'd really appreciate it!
Click to expand...
Click to collapse
Hmm .. + 1 with you .. but the only way is ... ask brut.all ....
Sent from my Galaxy Nexus using XDA App
qazsxdcfv said:
Hmm .. + 1 with you .. but the only way is ... ask brut.all ....
Click to expand...
Click to collapse
Thanks, I guess I'll have to after all (not that I mind doing it). Over 250 views and only one person to respond isn't giving me much hope that someone has an answer.
Have you found a solution for windows ?
Any solution?
Randomly came across this thread looking for info on compiling the aapt binary for Windows. I'm still looking for the answer for that but I do know the change that needs to be made and how to do that part, as I have already done this mod for aapt on Linux. You have to have a full build environment set up, and by that I mean set up to build a full ROM, like CM10 for example. The change to make is in the frameworks source code at frameworks/base/tools/aapt/Resource.cpp.
See this commit for the details:
http://review.cyanogenmod.org/#/c/24204/
Add the parts I highlighted in blue to the two lines below:
Code:
String16 baseName(it.getBaseName());
const char16_t* str = baseName.string();
const char16_t* const end = str + baseName.size();
while (str < end) {
if (!((*str >= 'a' && *str <= 'z')
[COLOR="RoyalBlue"][B]|| (*str >= 'A' && *str <= 'Z')[/B][/COLOR]
|| (*str >= '0' && *str <= '9')
|| *str == '_' || *str == '.')) {
fprintf(stderr, "%s: Invalid file name: must contain only [a-z[COLOR="RoyalBlue"][B]A-Z[/B][/COLOR]0-9_.]\n",
it.getPath().string());
hasErrors = true;
}
str++;
}
m4570d0n said:
Randomly came across this thread looking for info on compiling the aapt binary for Windows. I'm still looking for the answer for that but I do know the change that needs to be made and how to do that part, as I have already done this mod for aapt on Linux. You have to have a full build environment set up, and by that I mean set up to build a full ROM, like CM10 for example. The change to make is in the frameworks source code at frameworks/base/tools/aapt/Resource.cpp.
See this commit for the details:
http://review.cyanogenmod.org/#/c/24204/
Add the parts I highlighted in blue to the two lines below:
Code:
String16 baseName(it.getBaseName());
const char16_t* str = baseName.string();
const char16_t* const end = str + baseName.size();
while (str < end) {
if (!((*str >= 'a' && *str <= 'z')
[COLOR="RoyalBlue"][B]|| (*str >= 'A' && *str <= 'Z')[/B][/COLOR]
|| (*str >= '0' && *str <= '9')
|| *str == '_' || *str == '.')) {
fprintf(stderr, "%s: Invalid file name: must contain only [a-z[COLOR="RoyalBlue"][B]A-Z[/B][/COLOR]0-9_.]\n",
it.getPath().string());
hasErrors = true;
}
str++;
}
Click to expand...
Click to collapse
Thank you for your help but could you tell me where can I find frameworks/base/tools/aapt/Resource.cpp?
I don't understand where to find it?
Sorry to resurrect an old thread, but I've finally come across a Windows version of aapt.exe that accepts uppercase letters in XML filenames, courtesy of XDA user titanic_fanatic. I've modified the first post in the thread with the details. Happy theming!
MJPollard said:
Sorry to resurrect an old thread, but I've finally come across a Windows version of aapt.exe that accepts uppercase letters in XML filenames, courtesy of XDA user titanic_fanatic. I've modified the first post in the thread with the details. Happy theming!
Click to expand...
Click to collapse
That link does seem to work anymore (and the webpage gives malware warning in Norton).
Does anyone else have this file?

[Q] [Assistance needed] Acodec.cpp

I know most of you don't expect me starting a thread in the Q&A but I am out of ideas. I googled, searched, duh, but found nothing that could be useful to me.
The problem is that the file attached is giving me an error.
Code:
target thumb C++: libstagefright <= frameworks/base/media/libstagefright/ACodec.cpp
In file included from frameworks/base/media/libstagefright/ACodec.cpp:42:
./vendor/qcom/opensource/omx/mm-core/omxcore/inc/OMX_QCOMExtns.h:846: warning: 'typedef' was ignored in this declaration
frameworks/base/media/libstagefright/ACodec.cpp:176: error: expected primary-expression before 'struct'
frameworks/base/media/libstagefright/ACodec.cpp:176: error: expected ',' or ';' before 'struct'
frameworks/base/media/libstagefright/ACodec.cpp:3041: error: expected '}' at end of input
make: *** [out/target/product/golfu/obj/SHARED_LIBRARIES/libstagefright_intermediates/ACodec.o] Error 1
I tried editing it in several ways for about 2 hours but it doesn't work.
I would really appreciate if someone would either link me to a working one/tell me where the error is/fix it and point out the error.
Im curious as to what causes the error.
Thanks :3
which rom are you building?
best if you do a repo sync
cybojenix said:
which rom are you building?
best if you do a repo sync
Click to expand...
Click to collapse
I am building Cyanogenmod 9.
I tried deleting the frameworks folder, where the error is and then re-repo sync, but to no avail. :T
And yeah, to my surprise I did try repo syncing. o.o
You are missing an } sine the compiler passes by the typedef thing. Also you are misssing an ; but most of the errors are from }. I'll look over the code and I'll chech for the misssing/wrong }.
Sent from my HTC Desire C using xda premium
That's what it says but I reviewed the file and did not find any errors. So any help would be appreciated :3
Bump
I hate reviving a dead thread, but I'm going through the same problem right now, building CM9, and I got the same Acodec.cpp errors. I also checked the file and it was written correctly. I'm not sure how to fix this, and could use some help from the community.
SignOfTheShadow said:
I hate reviving a dead thread, but I'm going through the same problem right now, building CM9, and I got the same Acodec.cpp errors. I also checked the file and it was written correctly. I'm not sure how to fix this, and could use some help from the community.
Click to expand...
Click to collapse
Looks like there was something missing in the struct typedef thing.
Try removing //QCOM_HARDWARE from line #172
bugkillr said:
Can you share the local code snippet on pastebin? Looks like there was something missing in the struct typedef thing.
Click to expand...
Click to collapse
I can't access PasteBin from work (they consider the text there to be "Personal Storage & Backup"), so the file in it's entirety is attached after pasting into a .txt file.
This is Line 176, mentioned in the error code, with 5 lines before and after:
Code:
#endif
#endif //QCOM_HARDWARE
////////////////////////////////////////////////////////////////////////////////
struct ACodec::BaseState : public AState {
BaseState(ACodec *codec, const sp<AState> &parentState = NULL);
protected:
enum PortMode {
KEEP_BUFFERS,
and this is line 3041, with 5 before (3041 is the last line):
Code:
LOGV("FlushingOutputState Change state to port settings changed");
mCodec->changeState(mCodec->mOutputPortSettingsChangedState);
}
}
#endif
} // namespace android
I'm totally lost as far as this file goes. I'm no good with C++... Thank you for taking an interest, I really do appreciate it. I messaged Nick Bacon (OP) and he gave me some suggestions, but nothing really panned out.
I removed "//QCOM_HARDWARE" from line 172 and am brunching as we speak. I'll edit with the results in a few.
EDIT: No good. Same error.
2nd EDIT: I added a ";" and two carriage returns before "struct" on line 176, and that seemed to just give me more errors:
Code:
target thumb C++: libstagefright <= frameworks/base/media/libstagefright/ACodec.cpp
In file included from frameworks/base/media/libstagefright/ACodec.cpp:42:
./vendor/qcom/opensource/omx/mm-core/omxcore/inc/OMX_QCOMExtns.h:846: warning: 'typedef' was ignored in this declaration
frameworks/base/media/libstagefright/ACodec.cpp:176: error: expected primary-expression before ';' token
frameworks/base/media/libstagefright/ACodec.cpp: In member function 'android::status_t android::ACodec::allocateOutputBuffersFromNativeWindow()':
frameworks/base/media/libstagefright/ACodec.cpp:537: warning: enumeral mismatch in conditional expression: '<anonymous enum>' vs 'OMX_COLOR_FORMATTYPE'
frameworks/base/media/libstagefright/ACodec.cpp: In member function 'void android::ACodec::sendFormatChange()':
frameworks/base/media/libstagefright/ACodec.cpp:1386: warning: enumeral mismatch in conditional expression: '<anonymous enum>' vs 'OMX_COLOR_FORMATTYPE'
make: *** [out/target/product/l35g/obj/SHARED_LIBRARIES/libstagefright_intermediates/ACodec.o] Error 1
SignOfTheShadow said:
I removed "//QCOM_HARDWARE" from line 172 and am brunching as we speak. I'll edit with the results in a few.
EDIT: No good. Same error.
2nd EDIT: I added a ";" and two carriage returns before "struct" on line 176, and that seemed to just give me more errors:
Code:
target thumb C++: libstagefright <= frameworks/base/media/libstagefright/ACodec.cpp
In file included from frameworks/base/media/libstagefright/ACodec.cpp:42:
./vendor/qcom/opensource/omx/mm-core/omxcore/inc/OMX_QCOMExtns.h:846: warning: 'typedef' was ignored in this declaration
frameworks/base/media/libstagefright/ACodec.cpp:176: error: expected primary-expression before ';' token
frameworks/base/media/libstagefright/ACodec.cpp: In member function 'android::status_t android::ACodec::allocateOutputBuffersFromNativeWindow()':
frameworks/base/media/libstagefright/ACodec.cpp:537: warning: enumeral mismatch in conditional expression: '<anonymous enum>' vs 'OMX_COLOR_FORMATTYPE'
frameworks/base/media/libstagefright/ACodec.cpp: In member function 'void android::ACodec::sendFormatChange()':
frameworks/base/media/libstagefright/ACodec.cpp:1386: warning: enumeral mismatch in conditional expression: '<anonymous enum>' vs 'OMX_COLOR_FORMATTYPE'
make: *** [out/target/product/l35g/obj/SHARED_LIBRARIES/libstagefright_intermediates/ACodec.o] Error 1
Click to expand...
Click to collapse
Well, I don't even have the libraries used in this code and its a large piece of code. So what I can suggest you is setting breakpoints and debugging in Eclipse or a good IDE. OR alternatively you can use gdb or valgrind to see extended flaws in the code. Because just rectifying the bugs in the code would definitely solve the issue.
bugkillr said:
Well, I don't even have the libraries used in this code and its a large piece of code. So what I can suggest you is setting breakpoints and debugging in Eclipse or a good IDE. OR alternatively you can use gdb or valgrind to see extended flaws in the code. Because just rectifying the bugs in the code would definitely solve the issue.
Click to expand...
Click to collapse
I ended up adding:
Code:
{};
to line 175 of the original file. It worked. Thanks for helping.
Are u saying u successfully built cm9??
Sent from my HTC Desire C using xda app-developers app
SignOfTheShadow said:
I ended up adding:
Code:
{};
to line 175 of the original file. It worked. Thanks for helping.
Click to expand...
Click to collapse
Never knew that would fix it! Congratulations btw.
This is very useful. Thanks for the solve. Gonna spam some thanks and request this thread to be closed.

[SOLVED][Q] field in inner method

Hi all,first thanks to @GermainZ for help.
But now I have another problem:
I have this code:
Code:
public class ClassA {
public int MethodA(Param 1){
....
Boolean B1 = false;
String S1 = "...";
.....}}
I have to have access the field in this method.How can I do this?
Thanks in advance.
You can't directly, but you can recreate the process to get it again.
In the title, you mention an "inner class", but in your example the fields are inside a method. Which one do you mean? Fields in a method can indeed not be accessed.
Sorry I have correct the title.
In what way I can recreate all that method with the one hooked?
EDIT:may I have understand... I will try
Thanks to all,I've found another way to do that.

Creating xslx.-File in Android

Hi Guys,
I want to create a xslx-File in my Android Application. Im Using Apache poi-ooxml-3.12.jar for it. But while calling the XSSFWorkbook Constructor I get the following exception:
FATAL EXCEPTION: main
Code:
java.lang.VerifyError: org/apache/poi/xssf/usermodel/XSSFWorkbook
This is my Code (HSSFWorkbook Constructor is working btw):
Code:
Workbook workbook;
if (StringOperationsUtil.getFileExtension(file).equalsIgnoreCase("XLSX")){
workbook = new XSSFWorkbook();
} else {
//default xls
workbook = new HSSFWorkbook();
}
These are my gradle dependencies:
Code:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.opencsv:opencsv:3.4'
compile 'org.apache.poi:poi:3.12'
compile 'org.apache.poi:poi-ooxml:3.12'
compile 'com.android.support:multidex:1.0.0'
}
Also the apache team didn't answer me. I can't believe that it's not possible to create the newest excel file in an android application. Does really any Android Developer is not using xlsx files? I really can't believe this. Please let me know, if you guys know something about that issue.
Thanks in advance!
I tried to use the older poi.jar 3.8 and now i get this error:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
G:\android-sdk\build-tools\21.1.2\dx.bat --dex --no-optimize --multi-dex --main-dex-list G:\Development\workspace\FPT\app\build\intermediates\multi-dex\debug\maindexlist.txt --output G:\Development\workspace\FPT\app\build\intermediates\dex\debug --input-list=G:\Development\workspace\FPT\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
1
does anybody know how i fix this?
thanks

How to save & load module settings after MODE_WORLD_READABLE is gone?

According to document, trying to use MODE_WORLD_READABLE will crash the module UI with a SecurityException.
I've tried to use a ContentProvider, but unable to get the Context object in handleLoadPackage (Illegal state).
Is there any better way?
Tried to downgrade targetSdkVersion, the app no longer crashes but XSharedPreferences still can't read the file (the preferences file is already world readable)
You can use Remotepreferences (awesome library!). You will need a context however, so it is not suitable for methods in initzigote or where you can't access the context. I think is the only way as of now.
Massi-X said:
You can use Remotepreferences (awesome library!). You will need a context however, so it is not suitable for methods in initzigote or where you can't access the context. I think is the only way as of now.
Click to expand...
Click to collapse
Remotepreferences will complicate things.
The easiest way to do is to remove the below line
Code:
getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_READABLE);
And add the following on class level.
Code:
@Override
public void onPause() {
super.onPause();
// Set preferences permissions to be world readable
// Workaround for Android N and above since MODE_WORLD_READABLE will cause security exception and FC.
final File dataDir = new File(getActivity().getApplicationInfo().dataDir);
final File prefsDir = new File(dataDir, "shared_prefs");
final File prefsFile = new File(prefsDir, getPreferenceManager().getSharedPreferencesName() + ".xml");
if (prefsFile.exists()) {
dataDir.setReadable(true, false);
dataDir.setExecutable(true, false);
prefsDir.setReadable(true, false);
prefsDir.setExecutable(true, false);
prefsFile.setReadable(true, false);
prefsFile.setExecutable(true, false);
}
}
This method will work on any sdk :good:
I tested it myself and it is working fine.
Thanks to @PunchUp @pyler
laura almeida said:
Remotepreferences will complicate things.
The easiest way to do is to remove the below line
Code:
getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_READABLE);
And add the following on class level.
Code:
@Override
public void onPause() {
super.onPause();
// Set preferences permissions to be world readable
// Workaround for Android N and above since MODE_WORLD_READABLE will cause security exception and FC.
final File dataDir = new File(getActivity().getApplicationInfo().dataDir);
final File prefsDir = new File(dataDir, "shared_prefs");
final File prefsFile = new File(prefsDir, getPreferenceManager().getSharedPreferencesName() + ".xml");
if (prefsFile.exists()) {
dataDir.setReadable(true, false);
dataDir.setExecutable(true, false);
prefsDir.setReadable(true, false);
prefsDir.setExecutable(true, false);
prefsFile.setReadable(true, false);
prefsFile.setExecutable(true, false);
}
}
This method will work on any sdk :good:
I tested it myself and it is working fine.
Thanks to @PunchUp @pyler
Click to expand...
Click to collapse
Yeah but it seems an hacky thing. It will work with any Android? With selinux enabled? On custom ROMs? Surely Remotepreferences complicate things but is the best way (also for previous Android versions) of reading the preferences file. Anyway this can be another solution :good:
EDIT: I also found in marshmallow my apps was randomly failing reading the preferences (no real reason) and Remotepreferences solved the problem.
Massi-X said:
Remotepreferences will complicate things.
The easiest way to do is to remove the below line
And add the following on class level.
Yeah but it seems an hacky thing. It will work with any Android? With selinux enabled? On custom ROMs? Surely Remotepreferences complicate things but is the best way (also for previous Android versions) of reading the preferences file. Anyway this can be another solution :highfive:
Click to expand...
Click to collapse
With any android version - Yes
Will it work with previous android version - Yes
On custom ROMs - Yes
With selinux enabled ? - not tested yet. But I think it works.
laura almeida said:
With any android version - Yes
Will it work with previous android version - Yes
On custom ROMs - Yes
With selinux enabled ? - not tested yet. But I think it works.
Click to expand...
Click to collapse
Previous versions: I was speaking about another thing. See edit. Anyway it's another way, 2 is always better than 1.

Categories

Resources